无法解析符号' activity_main.xml'

时间:2015-12-23 09:23:37

标签: android opencv

我关注https://github.com/Ajay191191/Opencv-Face-Recognition

下图显示了在activity_main.xml及其下方两个红色圆圈中出现相同错误的错误。 enter image description here

代码是:

package com.example.altaf.opencv_test;


import android.content.Intent;
import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
import android.support.v7.app.AppCompatActivity;
 import org.opencv.objdetect.CascadeClassifier;

 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
import  android.R;
 import android.view.Menu;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;

 public class MainActivity extends Activity {

     Button detect_face, add_name, take_picture;
     TextView tv;
     TextView detectedName;
     private String File_Image_TAG = new String("image_db");
     private String File_Name_TAG = new String("name_db");
     public static Map<Integer, String> idToImage;
     public static Map<Integer, String> idToName;
     public static String current_name = new String("temp");
     ImageView captured_image;
     public static boolean face_detected;
     public static File working_Dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/opencv");
     public CascadeClassifier haar_cascade;
     public static int ID;
     private String Name_obt;
     BufferedWriter bW;
     static File fileC;

     static {
         working_Dir.mkdirs();
         fileC = new File(MainActivity.working_Dir, "csv.txt");

     }

     public static boolean pictureTaken, recognized;

     //Preview preview;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         setContentView(R.layout.activity_main);

         Name_obt = getIntent().getStringExtra("Name");
         if (Name_obt != null) {
             Log.i("Ajay", "Detected Name" + Name_obt);
         }


         ButtonListener listener = new ButtonListener();
         detect_face = ((Button) findViewById(R.id.detect_face));
         detect_face.setOnClickListener(listener);

         take_picture = (Button) findViewById(R.id.take_picture);
         take_picture.setOnClickListener(listener);

         //Load from file:
         File imagefile = new File(working_Dir, File_Image_TAG);
         File nameFile = new File(working_Dir, File_Name_TAG);
         if (imagefile.exists()) {
             try {
                 FileInputStream f = new FileInputStream(imagefile);
                 ObjectInputStream s = new ObjectInputStream(f);
                 idToImage = (Map<Integer, String>) s.readObject();
                 MainActivity.ID = idToImage.size();

                 s.close();
                 Log.i("Ajay", "Database Exists");
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         if (nameFile.exists()) {
             try {
                 FileInputStream f = new FileInputStream(nameFile);
                 ObjectInputStream s = new ObjectInputStream(f);
                 idToName = (Map<Integer, String>) s.readObject();

                 s.close();
                 Log.i("Ajay", "Database Exists");
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }


         add_name = (Button) findViewById(R.id.Add_n);
         add_name.setOnClickListener(listener);

         tv = (TextView) findViewById(R.id.name);
         tv.setVisibility(View.GONE);

         detectedName = (TextView) findViewById(R.id.Detected_name);
         detectedName.setVisibility(View.GONE);

         captured_image = (ImageView) findViewById(R.id.captured_image);
         if (!pictureTaken) {
             captured_image.setVisibility(View.GONE);
             add_name.setVisibility(View.GONE);
             detect_face.setVisibility(View.GONE);
             take_picture.setVisibility(View.VISIBLE);
         } else {
             if (face_detected) {
                 if (!recognized) {
                     detect_face.setVisibility(View.GONE);
                     add_name.setVisibility(View.VISIBLE);
                     take_picture.setVisibility(View.GONE);
                 } else {
                     //                 TODO: Print the hash value for ID obtained.
                     detectedName.setVisibility(View.VISIBLE);
                     detectedName.setText(Name_obt != null ? Name_obt : "");
                 }
             } else
                 detect_face.setVisibility(View.VISIBLE);
             captured_image.setVisibility(View.VISIBLE);


             //         add_name.setVisibility(View.GONE);
             take_picture.setVisibility(View.GONE);
             Bitmap bmp = null;
             File f = new File(working_Dir, current_name + "_det.jpg");
             if (f.exists()) {
                 MainActivity.face_detected = true;
                 bmp = BitmapFactory.decodeFile(working_Dir.getAbsolutePath() + "/" + current_name + "_det.jpg");
             } else {
                 MainActivity.face_detected = false;
                 bmp = BitmapFactory.decodeFile(working_Dir.getAbsolutePath() + "/" + current_name + ".jpg");
             }
             captured_image.setImageBitmap(bmp);
         }
     }

     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         getMenuInflater().inflate(R.menu.activity_main, menu);
         return true;
     }

     private class ButtonListener implements View.OnClickListener {
         Intent i;

         public void onClick(View v) {

             if (v.equals(findViewById(R.id.detect_face))) {
                 new Sample3View(getApplicationContext()).FindFaces(working_Dir.getAbsolutePath() + "/" + current_name, Sample3View.mCascadeFile.getAbsolutePath().toString());
                 Log.d("Ajay", "Image dir:" + working_Dir.getAbsolutePath() + "/" + current_name);
                 File f = new File(MainActivity.working_Dir, "csv.txt");
                 int return_id = -1;
                 if (f.exists() && MainActivity.ID > 1)
                     return_id = new Sample3View(getApplicationContext()).Find(working_Dir.getAbsolutePath() + "/" + current_name, Sample3View.mCascadeFile.getAbsolutePath().toString(), working_Dir.getAbsolutePath() + "/csv.txt");
                 MainActivity.face_detected = true;
                 String Name = null;
                 if (return_id != -1) {
                     Name = new String(idToName.get(return_id));
                     MainActivity.recognized = true;
                 }
                 startActivity(getIntent().putExtra("Name", Name));
                 //TODO : Add Face Detection
             } else if (v.equals(findViewById(R.id.Add_Name))) {
                 tv.setVisibility(View.VISIBLE);
                 if (tv.getText().toString().equals(""))
                     return;
                 String new_name = new String(tv.getText().toString());
                 //             faces.put(current_name, new ArrayList<String>());
                 if (idToImage == null) {
                     idToImage = new HashMap<Integer, String>();
                     MainActivity.ID = 0;
                 }
                 if (idToName == null)
                     idToName = new HashMap<Integer, String>();

                 idToImage.put(MainActivity.ID, MainActivity.working_Dir + "/" + new_name + ".jpg");
                 idToImage.put(MainActivity.ID, MainActivity.working_Dir + "/" + new_name + "1.jpg");
                 idToName.put(MainActivity.ID, new_name);


                 File f = new File(MainActivity.working_Dir, MainActivity.current_name + "_det.jpg");
                 if (!f.exists()) {
                     try {
                         f.createNewFile();
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 }

                 File f_new = new File(MainActivity.working_Dir, new_name + ".jpg");
                 if (!f_new.exists()) {
                     try {
                         f_new.createNewFile();
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 }
                 Log.i("Ajay", MainActivity.working_Dir + "");
                 f.renameTo(f_new);
                 f = new File(MainActivity.working_Dir, new_name + "1.jpg");

                 //copy the file content in bytes
                 try {
                     InputStream inStream = new FileInputStream(f_new);
                     OutputStream outStream = new FileOutputStream(f);

                     byte[] buffer = new byte[1024];

                     int length;

                     while ((length = inStream.read(buffer)) > 0) {

                         outStream.write(buffer, 0, length);

                     }
                     inStream.close();
                     outStream.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }


                 try {
                     File file = new File(MainActivity.working_Dir, File_Image_TAG);
                     FileOutputStream fo = new FileOutputStream(file);
                     ObjectOutputStream s = new ObjectOutputStream(fo);
                     s.writeObject(idToImage);
                     s.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
                 try {
                     File file = new File(MainActivity.working_Dir, File_Name_TAG);
                     FileOutputStream fo = new FileOutputStream(file);
                     ObjectOutputStream s = new ObjectOutputStream(fo);
                     s.writeObject(idToName);
                     s.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
                 try {
                     try {
                         bW = new BufferedWriter(new FileWriter(fileC, true));
                     } catch (IOException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
                     bW.append(MainActivity.working_Dir + "/" + new_name + ".jpg" + ";" + MainActivity.ID);
                     bW.newLine();
                     bW.append(MainActivity.working_Dir + "/" + new_name + "1.jpg" + ";" + MainActivity.ID);
                     bW.newLine();
                     bW.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }


                 Toast.makeText(getApplicationContext(), "Name Added", Toast.LENGTH_SHORT).show();
                 MainActivity.ID++;
                 startActivity(getIntent());
                 MainActivity.face_detected = false;
                 MainActivity.pictureTaken = false;
                 MainActivity.recognized = false;
                 //             Log.i("Ajay","String : " + current_name);
             } else if (v.equals(findViewById(R.id.take_picture))) {
                 i = new Intent(MainActivity.this, Sample3Native.class);
                 startActivity(i);
             }
         }
     }
 }

3 个答案:

答案 0 :(得分:8)

检查您的导入声明

import  android.R;

应该是

import  yourpackage.R;

答案 1 :(得分:5)

您导入了错误的R.java

删除import android.R;并导入com.example.altaf.opencv_test.R

R.java是生成Id's资源的文件,例如stringlayout。 如果这些res文件出现问题,则R.java无法生成。

答案 2 :(得分:0)

在这里,您必须

import yourpackagename.R;

然后使缓存无效/重新启动