| | |
| | | import android.widget.TextView; |
| | | import android.widget.Toast; |
| | | |
| | | |
| | | import com.dayu.recharge.R; |
| | | import com.dayu.recharge.view.ViewfinderView; |
| | | import com.yunmai.cc.idcard.controler.CameraManager; |
| | |
| | | import com.yunmai.cc.idcard.controler.OcrManager; |
| | | import com.yunmai.cc.idcard.vo.IdCardInfoNew; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | |
| | | |
| | | /** |
| | | * 视频识别类 |
| | | * |
| | | * |
| | | * @author fangcm 2013-03-18 |
| | | * |
| | | */ |
| | | |
| | | public class CameraActivity extends BaseActivity implements SurfaceHolder.Callback { |
| | | public class CameraActivity extends Activity implements SurfaceHolder.Callback { |
| | | |
| | | private final String TAG = "cc_idcard"; |
| | | private final String TAG = "cc_idcard"; |
| | | |
| | | private TextView tvTips; |
| | | private SurfaceView sv_preview; |
| | | private SurfaceHolder surfaceHolder; |
| | | private CameraManager cameraManager; |
| | | private boolean autoFoucs = true; |
| | | private ViewfinderView finderView; |
| | | private OcrManager ocrManager; |
| | | private Rect rect; |
| | | private boolean cameraError = false; |
| | | // private boolean over = false; |
| | | private TextView tvTips; |
| | | private SurfaceView sv_preview; |
| | | private SurfaceHolder surfaceHolder; |
| | | private CameraManager cameraManager; |
| | | private boolean autoFoucs = true; |
| | | private ViewfinderView finderView; |
| | | private OcrManager ocrManager; |
| | | private Rect rect; |
| | | private boolean cameraError = false; |
| | | // private boolean over = false; |
| | | |
| | | private Button btnFlash, btnCancel; |
| | | private ImageView imgTips; |
| | | private ImageView iv, ivHead; |
| | | private int typeFront = 1;// 0不区分 ,1正面,2背面 |
| | | private Button btnFlash, btnCancel; |
| | | private ImageView imgTips; |
| | | private ImageView iv, ivHead; |
| | | private int typeFront = 0;// 0不区分 ,1正面,2背面 |
| | | |
| | | @Override |
| | | protected void onCreate(Bundle savedInstanceState) { |
| | | // TODO Auto-generated method stub |
| | | super.onCreate(savedInstanceState); |
| | | setContentView(R.layout.camera); |
| | | @Override |
| | | protected void onCreate(Bundle savedInstanceState) { |
| | | // TODO Auto-generated method stub |
| | | super.onCreate(savedInstanceState); |
| | | setContentView(R.layout.camera); |
| | | |
| | | typeFront = this.getIntent().getIntExtra("typeFront", 0); |
| | | initView(); |
| | | cameraManager = new CameraManager(getBaseContext(), mHandler); |
| | | mCameraOpenThread.start(); |
| | | try { |
| | | mCameraOpenThread.join(); |
| | | mCameraOpenThread = null; |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | cameraError = true; |
| | | } |
| | | if (cameraError) { |
| | | Toast.makeText(getBaseContext(), "照相机未启动!", Toast.LENGTH_SHORT).show(); |
| | | finish(); |
| | | return; |
| | | } |
| | | setParameters(); |
| | | typeFront = this.getIntent().getIntExtra("typeFront", 0); |
| | | initView(); |
| | | cameraManager = new CameraManager(getBaseContext(), mHandler); |
| | | mCameraOpenThread.start(); |
| | | try { |
| | | mCameraOpenThread.join(); |
| | | mCameraOpenThread = null; |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | cameraError = true; |
| | | } |
| | | if (cameraError) { |
| | | Toast.makeText(getBaseContext(), "照相机未启动!", Toast.LENGTH_SHORT).show(); |
| | | finish(); |
| | | return; |
| | | } |
| | | setParameters(); |
| | | |
| | | } |
| | | } |
| | | |
| | | private Thread mCameraOpenThread = new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | cameraManager.openCamera(); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | cameraError = true; |
| | | } |
| | | } |
| | | }); |
| | | private Thread mCameraOpenThread = new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | cameraManager.openCamera(); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | cameraError = true; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | private void setParameters() { |
| | | private void setParameters() { |
| | | |
| | | WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); |
| | | Display display = manager.getDefaultDisplay(); |
| | | int wWidth = display.getWidth(); |
| | | int wHeight = display.getHeight(); |
| | | WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); |
| | | Display display = manager.getDefaultDisplay(); |
| | | int wWidth = display.getWidth(); |
| | | int wHeight = display.getHeight(); |
| | | |
| | | cameraManager.setCameraFlashModel(Camera.Parameters.FLASH_MODE_OFF); |
| | | cameraManager.setCameraFlashModel(Camera.Parameters.FLASH_MODE_OFF); |
| | | |
| | | float ps = wWidth * 1.0f / wHeight; |
| | | cameraManager.setPreviewSize(ps); |
| | | float ps = wWidth * 1.0f / wHeight; |
| | | cameraManager.setPreviewSize(ps); |
| | | |
| | | int pWidth = cameraManager.getPreviewWidth(); |
| | | int pHeight = cameraManager.getPreviewHeight(); |
| | | if (pWidth == 0 || pHeight == 0) { |
| | | Toast.makeText(getBaseContext(), "照相机未启动!!", Toast.LENGTH_SHORT).show(); |
| | | finish(); |
| | | return; |
| | | } |
| | | Log.i(TAG, pWidth + "<--------W----Preview-----H------->" + pHeight); |
| | | Log.i(TAG, wWidth + "<--------W----WindowManager-----H------->" + wHeight); |
| | | int pWidth = cameraManager.getPreviewWidth(); |
| | | int pHeight = cameraManager.getPreviewHeight(); |
| | | if (pWidth == 0 || pHeight == 0) { |
| | | Toast.makeText(getBaseContext(), "照相机未启动!!", Toast.LENGTH_SHORT).show(); |
| | | finish(); |
| | | return; |
| | | } |
| | | Log.i(TAG, pWidth + "<--------W----Preview-----H------->" + pHeight); |
| | | Log.i(TAG, wWidth + "<--------W----WindowManager-----H------->" + wHeight); |
| | | |
| | | int tempWidth = pWidth; |
| | | int tempHeidht = pHeight; |
| | | float x = 100.0f; |
| | | int tempW = pWidth; |
| | | int tempH = pHeight; |
| | | if (wWidth > pWidth && wHeight > pHeight) { |
| | | while (wWidth > tempW && wHeight > tempH) { |
| | | x++; |
| | | Log.d(TAG, "---xx----->" + x / 100.0); |
| | | tempW = (int) (pWidth * x / 100.0); |
| | | tempH = (int) (pHeight * x / 100.0); |
| | | if (wWidth > tempW && wHeight > tempH) { |
| | | tempWidth = tempW; |
| | | tempHeidht = tempH; |
| | | } |
| | | } |
| | | Log.d(TAG, "<------11--wWidth > pWidth && wHeight > pHeight------>"); |
| | | } else { |
| | | while (tempWidth > wWidth || tempHeidht > wHeight) { |
| | | x--; |
| | | Log.d(TAG, "---xx----->" + x / 100.0); |
| | | tempWidth = (int) (pWidth * x / 100.0); |
| | | tempHeidht = (int) (pHeight * x / 100.0); |
| | | } |
| | | Log.d(TAG, "<-----22---tempWidth > wWidth || tempHeidht > wHeight------>"); |
| | | } |
| | | int tempWidth = pWidth; |
| | | int tempHeidht = pHeight; |
| | | float x = 100.0f; |
| | | int tempW = pWidth; |
| | | int tempH = pHeight; |
| | | if (wWidth > pWidth && wHeight > pHeight) { |
| | | while (wWidth > tempW && wHeight > tempH) { |
| | | x++; |
| | | Log.d(TAG, "---xx----->" + x / 100.0); |
| | | tempW = (int) (pWidth * x / 100.0); |
| | | tempH = (int) (pHeight * x / 100.0); |
| | | if (wWidth > tempW && wHeight > tempH) { |
| | | tempWidth = tempW; |
| | | tempHeidht = tempH; |
| | | } |
| | | } |
| | | Log.d(TAG, "<------11--wWidth > pWidth && wHeight > pHeight------>"); |
| | | } else { |
| | | while (tempWidth > wWidth || tempHeidht > wHeight) { |
| | | x--; |
| | | Log.d(TAG, "---xx----->" + x / 100.0); |
| | | tempWidth = (int) (pWidth * x / 100.0); |
| | | tempHeidht = (int) (pHeight * x / 100.0); |
| | | } |
| | | Log.d(TAG, "<-----22---tempWidth > wWidth || tempHeidht > wHeight------>"); |
| | | } |
| | | |
| | | Log.d(TAG, tempWidth + "<--------W----setParameters-----H------->" + tempHeidht); |
| | | // tempWidth = 854; |
| | | // tempHeidht = 480; |
| | | ViewGroup.LayoutParams lp = sv_preview.getLayoutParams(); |
| | | lp.width = tempWidth; |
| | | lp.height = tempHeidht; |
| | | sv_preview.getHolder().setFixedSize(tempWidth, tempHeidht); |
| | | sv_preview.setLayoutParams(lp); |
| | | Log.d(TAG, tempWidth + "<--------W----setParameters-----H------->" + tempHeidht); |
| | | // tempWidth = 854; |
| | | // tempHeidht = 480; |
| | | ViewGroup.LayoutParams lp = sv_preview.getLayoutParams(); |
| | | lp.width = tempWidth; |
| | | lp.height = tempHeidht; |
| | | sv_preview.getHolder().setFixedSize(tempWidth, tempHeidht); |
| | | sv_preview.setLayoutParams(lp); |
| | | |
| | | surfaceHolder = sv_preview.getHolder(); |
| | | surfaceHolder.addCallback(CameraActivity.this); |
| | | surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); |
| | | surfaceHolder = sv_preview.getHolder(); |
| | | surfaceHolder.addCallback(CameraActivity.this); |
| | | surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); |
| | | |
| | | float[] img = finderView.initFinder(tempWidth, tempHeidht, mHandler, typeFront); |
| | | float[] img = finderView.initFinder(tempWidth, tempHeidht, mHandler, typeFront); |
| | | |
| | | imgTips.setY(img[0]); |
| | | imgTips.setX(img[1]); |
| | | imgTips.setY(img[0]); |
| | | imgTips.setX(img[1]); |
| | | |
| | | } |
| | | } |
| | | |
| | | private void initView() { |
| | | sv_preview = (SurfaceView) findViewById(R.id.camera_sv); |
| | | finderView = (ViewfinderView) findViewById(R.id.camera_finderView); |
| | | tvTips = (TextView) findViewById(R.id.tv_tips); |
| | | btnCancel = (Button) findViewById(R.id.bt_cancel); |
| | | btnFlash = (Button) findViewById(R.id.bt_flash); |
| | | imgTips = (ImageView) findViewById(R.id.iv_tips); |
| | | switch (typeFront) { |
| | | case 0: |
| | | imgTips.setVisibility(View.GONE); |
| | | break; |
| | | case 1: |
| | | imgTips.setBackgroundResource(R.mipmap.people_face); |
| | | break; |
| | | case 2: |
| | | imgTips.setBackgroundResource(R.mipmap.emblem); |
| | | break; |
| | | private void initView() { |
| | | sv_preview = (SurfaceView) findViewById(R.id.camera_sv); |
| | | finderView = (ViewfinderView) findViewById(R.id.camera_finderView); |
| | | tvTips = (TextView) findViewById(R.id.tv_tips); |
| | | btnCancel = (Button) findViewById(R.id.bt_cancel); |
| | | btnFlash = (Button) findViewById(R.id.bt_flash); |
| | | imgTips = (ImageView) findViewById(R.id.iv_tips); |
| | | switch (typeFront) { |
| | | case 0: |
| | | imgTips.setVisibility(View.GONE); |
| | | break; |
| | | case 1: |
| | | imgTips.setBackgroundResource(R.mipmap.people_face); |
| | | break; |
| | | case 2: |
| | | imgTips.setBackgroundResource(R.mipmap.emblem); |
| | | break; |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | btnFlash.setOnClickListener(listener); |
| | | btnCancel.setOnClickListener(listener); |
| | | } |
| | | btnFlash.setOnClickListener(listener); |
| | | btnCancel.setOnClickListener(listener); |
| | | } |
| | | |
| | | private boolean isFlashOn = false; |
| | | private boolean isFlashOn = false; |
| | | |
| | | private OnClickListener listener = new OnClickListener() { |
| | | private OnClickListener listener = new OnClickListener() { |
| | | |
| | | @Override |
| | | public void onClick(View v) { |
| | | // TODO Auto-generated method stub |
| | | switch (v.getId()) { |
| | | case R.id.bt_cancel: |
| | | setResult(998); |
| | | finish(); |
| | | break; |
| | | case R.id.bt_flash: |
| | | if (isFlashOn) { |
| | | try { |
| | | if (cameraManager.closeFlashlight()) { |
| | | btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_on_s)); |
| | | isFlashOn = false; |
| | | } |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | @Override |
| | | public void onClick(View v) { |
| | | // TODO Auto-generated method stub |
| | | switch (v.getId()) { |
| | | case R.id.bt_cancel: |
| | | setResult(998); |
| | | finish(); |
| | | break; |
| | | case R.id.bt_flash: |
| | | if (isFlashOn) { |
| | | try { |
| | | if (cameraManager.closeFlashlight()) { |
| | | btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_on_s)); |
| | | isFlashOn = false; |
| | | } |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | |
| | | } else { |
| | | try { |
| | | if (cameraManager.openFlashlight()) { |
| | | btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_off_s)); |
| | | isFlashOn = true; |
| | | } |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | } else { |
| | | try { |
| | | if (cameraManager.openFlashlight()) { |
| | | btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_off_s)); |
| | | isFlashOn = true; |
| | | } |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | |
| | | } |
| | | break; |
| | | } |
| | | break; |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | }; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | private Handler mHandler = new Handler() { |
| | | private Handler mHandler = new Handler() { |
| | | |
| | | @Override |
| | | public void handleMessage(Message msg) { |
| | | // TODO Auto-generated method stub |
| | | super.handleMessage(msg); |
| | | switch (msg.what) { |
| | | case OcrConstant.TAKE_PREVIEW_DATA_OK: |
| | | @Override |
| | | public void handleMessage(Message msg) { |
| | | // TODO Auto-generated method stub |
| | | super.handleMessage(msg); |
| | | switch (msg.what) { |
| | | case OcrConstant.TAKE_PREVIEW_DATA_OK: |
| | | Log.d("yxl", "TAKE_PREVIEW_DATA_OK"); |
| | | if (ocrManager == null) { |
| | | ocrManager = new OcrManager(mHandler, CameraActivity.this); |
| | | try { |
| | | rect = cameraManager.getViewfinder(finderView.getFinder()); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | return; |
| | | } |
| | | |
| | | if (ocrManager == null) { |
| | | ocrManager = new OcrManager(mHandler, CameraActivity.this); |
| | | try { |
| | | rect = cameraManager.getViewfinder(finderView.getFinder()); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | return; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | byte[] data_p = (byte[]) msg.obj; |
| | | if (data_p != null && data_p.length > 0) { |
| | | // if(over){ |
| | | // return; |
| | | // } |
| | | ocrManager.recognIDCard(data_p, cameraManager.getPreviewWidth(), cameraManager.getPreviewHeight(), |
| | | rect, 0, typeFront); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 100); |
| | | } else { |
| | | finderView.setLineRect(0); |
| | | Toast.makeText(getBaseContext(), "相机出现问题,请重启手机!", Toast.LENGTH_SHORT).show(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | } |
| | | break; |
| | | case OcrConstant.RECOGN_OK: |
| | | mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); |
| | | mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); |
| | | byte[] data_p = (byte[]) msg.obj; |
| | | if (data_p != null && data_p.length > 0) { |
| | | // if(over){ |
| | | // return; |
| | | // } |
| | | ocrManager.recognIDCard(data_p, cameraManager.getPreviewWidth(), cameraManager.getPreviewHeight(), |
| | | rect, 0, typeFront); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 100); |
| | | } else { |
| | | finderView.setLineRect(0); |
| | | Toast.makeText(getBaseContext(), "相机出现问题,请重启手机!", Toast.LENGTH_SHORT).show(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | } |
| | | break; |
| | | case OcrConstant.RECOGN_OK: |
| | | Log.d("yxl", "RECOGN_OK"); |
| | | mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); |
| | | mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); |
| | | // String imgPath = "/sdcard/aidtest.jpg"; |
| | | // String headPath = "/sdcard/aidheadtest.jpg"; |
| | | |
| | | byte[] headPath = new byte[2048 * 1024 * 3]; |
| | | byte[] imgPath = new byte[2048 * 1024 * 3]; |
| | | int[] headRect = new int[8]; |
| | | int[] imgRect = new int[8]; |
| | | byte[] headPath = new byte[2048 * 1024 * 2]; |
| | | byte[] imgPath = new byte[2048 * 1024 * 2]; |
| | | int[] headRect = new int[8]; |
| | | int[] imgRect = new int[8]; |
| | | |
| | | IdCardInfoNew idCardInfo = ocrManager.getResultToByte(imgPath, imgRect, headPath, headRect); |
| | | IdCardInfoNew idCardInfo = ocrManager.getResultToByte(imgPath, imgRect, headPath, headRect); |
| | | try { |
| | | String OCRResult = new String(idCardInfo.getCharInfo(), "gbk"); |
| | | Intent intent = new Intent(); |
| | | intent.putExtra("OCRResult", OCRResult); |
| | | setResult(RESULT_OK, intent); |
| | | } catch (UnsupportedEncodingException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | // IdCardInfo idCardInfo = ocrManager.getResult(imgPath, headPath); |
| | | Intent data2 = new Intent(); |
| | | data2.putExtra("idcardinfo", idCardInfo); |
| | | setResult(200, data2); |
| | | // AppDemo.setResult(idCardInfo); |
| | | // Intent data2 = new Intent(); |
| | | // data2.putExtra("idcardinfo", idCardInfo); |
| | | // setResult(200, data2); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.REPEAT_AUTOFOCUS: |
| | | Log.d("yxl", "REPEAT_AUTOFOCUS"); |
| | | |
| | | finish(); |
| | | cameraManager.autoFoucs(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 2000); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_TIME_OUT: |
| | | Log.d("yxl", "RECOGN_EG_TIME_OUT"); |
| | | Toast.makeText(getBaseContext(), "引擎过期,请尽快更新!", Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_LICENSE: |
| | | Log.d("yxl", "RECOGN_EG_LICENSE"); |
| | | |
| | | break; |
| | | case OcrConstant.REPEAT_AUTOFOCUS: |
| | | cameraManager.autoFoucs(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 2000); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_TIME_OUT: |
| | | Toast.makeText(getBaseContext(), "引擎过期,请尽快更新!", Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_LICENSE: |
| | | int ret = -1; |
| | | if (msg.obj != null) { |
| | | ret = (Integer) msg.obj; |
| | | } |
| | | Toast.makeText(getBaseContext(), "授权失败-->" + ret, Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_INIT_ERROR: |
| | | Toast.makeText(getBaseContext(), "引擎初始化失败!", Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.START_AUTOFOCUS: |
| | | if (autoFoucs) { |
| | | cameraManager.autoFoucs(); |
| | | autoFoucs = false; |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 1500); |
| | | } else { |
| | | cameraManager.autoFocusAndPreviewCallback(); |
| | | } |
| | | break; |
| | | case OcrConstant.RECOGN_LINE_IN_RECT: |
| | | int restult = (Integer) msg.obj; |
| | | finderView.setLineRect(restult); |
| | | break; |
| | | case OcrConstant.RECOGN_TIPS: |
| | | int tips = (Integer) msg.obj; |
| | | switch (tips) { |
| | | case 1000: |
| | | tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); |
| | | break; |
| | | case 1001: |
| | | tvTips.setText("距离稍近,请尝试远点"); |
| | | break; |
| | | case 1002: |
| | | tvTips.setText("距离稍远,请尝试靠近"); |
| | | break; |
| | | case 1003: |
| | | // tvTips.setText("图像模糊,请调整距离"); |
| | | break; |
| | | case 1004: |
| | | tvTips.setText("图像倾斜,请保持水平拍摄"); |
| | | break; |
| | | case 1005: |
| | | tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); |
| | | break; |
| | | case 1006: |
| | | tvTips.setText("请将身份证正面至于此区域"); |
| | | break; |
| | | case 1007: |
| | | tvTips.setText("请将身份证反面至于此区域"); |
| | | break; |
| | | int ret = -1; |
| | | if (msg.obj != null) { |
| | | ret = (Integer) msg.obj; |
| | | } |
| | | Toast.makeText(getBaseContext(), "授权失败-->" + ret, Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.RECOGN_EG_INIT_ERROR: |
| | | Log.d("yxl", "RECOGN_EG_INIT_ERROR"); |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | Toast.makeText(getBaseContext(), "引擎初始化失败!", Toast.LENGTH_LONG).show(); |
| | | finish(); |
| | | break; |
| | | case OcrConstant.START_AUTOFOCUS: |
| | | Log.d("yxl", "START_AUTOFOCUS"); |
| | | |
| | | break; |
| | | default: |
| | | cameraManager.initDisplay(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | Toast.makeText(getBaseContext(), "<>" + msg.what, Toast.LENGTH_SHORT).show(); |
| | | break; |
| | | } |
| | | } |
| | | if (autoFoucs) { |
| | | cameraManager.autoFoucs(); |
| | | autoFoucs = false; |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 1500); |
| | | } else { |
| | | cameraManager.autoFocusAndPreviewCallback(); |
| | | } |
| | | break; |
| | | case OcrConstant.RECOGN_LINE_IN_RECT: |
| | | Log.d("yxl", "RECOGN_LINE_IN_RECT"); |
| | | |
| | | }; |
| | | int restult = (Integer) msg.obj; |
| | | finderView.setLineRect(restult); |
| | | break; |
| | | case OcrConstant.RECOGN_TIPS: |
| | | Log.d("yxl", "RECOGN_TIPS"); |
| | | int tips = (Integer) msg.obj; |
| | | switch (tips) { |
| | | case 1000: |
| | | tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); |
| | | break; |
| | | case 1001: |
| | | tvTips.setText("距离稍近,请尝试远点"); |
| | | break; |
| | | case 1002: |
| | | tvTips.setText("距离稍远,请尝试靠近"); |
| | | break; |
| | | case 1003: |
| | | // tvTips.setText("图像模糊,请调整距离"); |
| | | break; |
| | | case 1004: |
| | | tvTips.setText("图像倾斜,请保持水平拍摄"); |
| | | break; |
| | | case 1005: |
| | | tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); |
| | | break; |
| | | case 1006: |
| | | tvTips.setText("请将身份证正面至于此区域"); |
| | | break; |
| | | case 1007: |
| | | tvTips.setText("请将身份证反面至于此区域"); |
| | | break; |
| | | |
| | | @Override |
| | | public void surfaceCreated(SurfaceHolder holder) { |
| | | // TODO Auto-generated method stub |
| | | Log.d(TAG, "surfaceCreated"); |
| | | if (!cameraManager.cameraOpened()) { |
| | | cameraManager.openCamera(); |
| | | setParameters(); |
| | | } |
| | | } |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | @Override |
| | | public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
| | | // TODO Auto-generated method stub |
| | | if (holder.getSurface() == null) { |
| | | Log.d(TAG, "holder.getSurface() == null"); |
| | | return; |
| | | } |
| | | Log.v(TAG, "surfaceChanged. w=" + width + ". h=" + height); |
| | | surfaceHolder = holder; |
| | | cameraManager.setPreviewDisplay(surfaceHolder); |
| | | cameraManager.initDisplay(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | break; |
| | | default: |
| | | Log.d("yxl", "default"); |
| | | cameraManager.initDisplay(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | Toast.makeText(getBaseContext(), "<>" + msg.what, Toast.LENGTH_SHORT).show(); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | }; |
| | | |
| | | @Override |
| | | public void surfaceDestroyed(SurfaceHolder holder) { |
| | | // TODO Auto-generated method stub |
| | | Log.d(TAG, "surfaceDestroyed"); |
| | | try { |
| | | cameraManager.closeCamera(); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | @Override |
| | | public void surfaceCreated(SurfaceHolder holder) { |
| | | // TODO Auto-generated method stub |
| | | Log.d(TAG, "surfaceCreated"); |
| | | if (!cameraManager.cameraOpened()) { |
| | | cameraManager.openCamera(); |
| | | setParameters(); |
| | | } |
| | | } |
| | | |
| | | surfaceHolder = null; |
| | | } |
| | | @Override |
| | | public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
| | | // TODO Auto-generated method stub |
| | | if (holder.getSurface() == null) { |
| | | Log.d(TAG, "holder.getSurface() == null"); |
| | | return; |
| | | } |
| | | Log.v(TAG, "surfaceChanged. w=" + width + ". h=" + height); |
| | | surfaceHolder = holder; |
| | | cameraManager.setPreviewDisplay(surfaceHolder); |
| | | cameraManager.initDisplay(); |
| | | mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); |
| | | |
| | | private void finishAll() { |
| | | if (cameraManager != null) { |
| | | try { |
| | | cameraManager.closeCamera(); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | } |
| | | |
| | | } |
| | | @Override |
| | | public void surfaceDestroyed(SurfaceHolder holder) { |
| | | // TODO Auto-generated method stub |
| | | Log.d(TAG, "surfaceDestroyed"); |
| | | try { |
| | | cameraManager.closeCamera(); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | |
| | | } |
| | | surfaceHolder = null; |
| | | } |
| | | |
| | | @Override |
| | | protected void onDestroy() { |
| | | // TODO Auto-generated method stub |
| | | super.onDestroy(); |
| | | mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); |
| | | mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); |
| | | finishAll(); |
| | | private void finishAll() { |
| | | if (cameraManager != null) { |
| | | try { |
| | | cameraManager.closeCamera(); |
| | | } catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | protected void onDestroy() { |
| | | // TODO Auto-generated method stub |
| | | super.onDestroy(); |
| | | mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); |
| | | mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); |
| | | finishAll(); |
| | | |
| | | } |
| | | |
| | | } |