/*
* Copyright (C) 2017 Baidu, Inc. All Rights Reserved.
*/
package com.baidu.ocr.demo.tomenter.ui.camera;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import android.Manifest;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.Image;
import android.media.ImageReader;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.util.Size;
import android.util.SparseIntArray;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.WindowManager;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class Camera2Control implements ICameraControl {
@Override
public void setDetectCallback(OnDetectPictureCallback callback) {
// TODO 暂时只用camera
}
@Override
public AtomicBoolean getAbortingScan() {
// TODO 暂时只用camera
return null;
}
/**
* Conversion from screen rotation to JPEG orientation.
*/
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
private static final int MAX_PREVIEW_SIZE = 2048;
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
private static final int STATE_PREVIEW = 0;
private static final int STATE_WAITING_FOR_LOCK = 1;
private static final int STATE_WAITING_FOR_CAPTURE = 2;
private static final int STATE_CAPTURING = 3;
private static final int STATE_PICTURE_TAKEN = 4;
private static final int MAX_PREVIEW_WIDTH = 1920;
private static final int MAX_PREVIEW_HEIGHT = 1080;
private int flashMode;
private int orientation = 0;
private int state = STATE_PREVIEW;
private Context context;
private OnTakePictureCallback onTakePictureCallback;
private PermissionCallback permissionCallback;
private String cameraId;
private TextureView textureView;
private Size previewSize;
private Rect previewFrame = new Rect();
private HandlerThread backgroundThread;
private Handler backgroundHandler;
private ImageReader imageReader;
private CameraCaptureSession captureSession;
private CameraDevice cameraDevice;
private CaptureRequest.Builder previewRequestBuilder;
private CaptureRequest previewRequest;
private Semaphore cameraLock = new Semaphore(1);
private int sensorOrientation;
@Override
public void start() {
startBackgroundThread();
if (textureView.isAvailable()) {
openCamera(textureView.getWidth(), textureView.getHeight());
textureView.setSurfaceTextureListener(surfaceTextureListener);
} else {
textureView.setSurfaceTextureListener(surfaceTextureListener);
}
}
@Override
public void stop() {
textureView.setSurfaceTextureListener(null);
closeCamera();
stopBackgroundThread();
}
@Override
public void pause() {
setFlashMode(FLASH_MODE_OFF);
}
@Override
public void resume() {
state = STATE_PREVIEW;
}
@Override
public View getDisplayView() {
return textureView;
}
@Override
public Rect getPreviewFrame() {
return previewFrame;
}
@Override
public void takePicture(OnTakePictureCallback callback) {
this.onTakePictureCallback = callback;
// 拍照第一步,对焦
lockFocus();
}
@Override
public void setPermissionCallback(PermissionCallback callback) {
this.permissionCallback = callback;
}
@Override
public void setDisplayOrientation(@CameraView.Orientation int displayOrientation) {
this.orientation = displayOrientation / 90;
}
@Override
public void refreshPermission() {
openCamera(textureView.getWidth(), textureView.getHeight());
}
@Override
public void setFlashMode(@FlashMode int flashMode) {
if (this.flashMode == flashMode) {
return;
}
this.flashMode = flashMode;
try {
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
updateFlashMode(flashMode, previewRequestBuilder);
previewRequest = previewRequestBuilder.build();
captureSession.setRepeatingRequest(previewRequest, captureCallback, backgroundHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getFlashMode() {
return flashMode;
}
public Camera2Control(Context activity) {
this.context = activity;
textureView = new TextureView(activity);
}
private final TextureView.SurfaceTextureListener surfaceTextureListener =
new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) {
openCamera(width, height);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int height) {
configureTransform(width, height);
previewFrame.left = 0;
previewFrame.top = 0;
previewFrame.right = width;
previewFrame.bottom = height;
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture texture) {
stop();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
}
};
private void openCamera(int width, int height) {
// 6.0+的系统需要检查系统权限 。
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestCameraPermission();
return;
}
setUpCameraOutputs(width, height);
configureTransform(width, height);
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
try {
if (!cameraLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("Time out waiting to lock camera opening.");
}
manager.openCamera(cameraId, deviceStateCallback, backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (InterruptedException e) {
throw new RuntimeException("Interrupted while trying to
没有合适的资源?快使用搜索试试~ 我知道了~
百度文字SDK识别DEMO-Eclipse版本【完美运行】
共229个文件
class:115个
png:40个
java:21个
4星 · 超过85%的资源 需积分: 14 33 下载量 94 浏览量
2017-11-16
14:56:11
上传
评论
收藏 10.32MB ZIP 举报
温馨提示
百度文字SDK识别DEMO-Eclipse版本,自己花时间一段段代码从Android Studio上移到Eclipse中的,亲测可完美运行。只需把MainActivity中的initAccessTokenWithAkSk方法下的 API Key和Secret Key改成自己申请的就可以了。
资源推荐
资源详情
资源评论
收起资源包目录
百度文字SDK识别DEMO-Eclipse版本【完美运行】 (229个子文件)
resources.ap_ 89KB
MainActivity.apk 3.77MB
Camera2Control.class 20KB
Camera1Control.class 15KB
CameraView.class 15KB
CameraActivity.class 13KB
CropView.class 9KB
FrameOverlayView.class 8KB
MaskView.class 7KB
MainActivity.class 6KB
OCRCameraLayout.class 6KB
IDCardActivity.class 5KB
RecognizeService.class 4KB
Camera2Control$6.class 3KB
IDcardQualityProcess.class 3KB
CameraActivity$6$1.class 3KB
Camera2Control$4.class 3KB
CameraView$CameraViewTakePictureCallback.class 3KB
ImageUtil.class 3KB
Camera1Control$PreviewView.class 3KB
RecognizeService$1.class 2KB
Camera1Control$1.class 2KB
RecognizeService$3.class 2KB
RecognizeService$2.class 2KB
RecognizeService$4.class 2KB
CameraActivity$5$1.class 2KB
CameraActivity$14.class 2KB
CameraActivity$8.class 2KB
RecognizeService$5.class 2KB
OCRFrameLayout.class 2KB
Camera1Control$2.class 2KB
CameraView$CameraViewTakePictureCallback$1.class 2KB
R$id.class 2KB
Camera2Control$3.class 2KB
IDCardActivity$4.class 2KB
IDCardActivity$6.class 2KB
Camera2Control$1.class 2KB
Camera1Control$4.class 2KB
CameraActivity$13.class 2KB
CameraActivity$2.class 2KB
Camera2Control$2.class 2KB
Camera2Control$7.class 2KB
MainActivity$11.class 2KB
MainActivity$10.class 2KB
RecognizeService$6.class 2KB
RecognizeService$7.class 2KB
RecognizeService$8.class 2KB
CameraThreadPool.class 2KB
MainActivity$6.class 2KB
MainActivity$2.class 2KB
MainActivity$7.class 2KB
MainActivity$1.class 2KB
MainActivity$3.class 2KB
MainActivity$4.class 2KB
MainActivity$9.class 2KB
MainActivity$8.class 2KB
CropView$2.class 2KB
IDCardActivity$7.class 2KB
ICameraControl.class 2KB
IDCardActivity$3.class 1KB
IDCardActivity$5.class 1KB
Camera1Control$5.class 1KB
CameraActivity$4.class 1KB
CameraView$3.class 1KB
IDCardActivity$8.class 1KB
MainActivity$12.class 1KB
CropView$1.class 1KB
CameraActivity$6.class 1KB
CameraActivity$5.class 1KB
CameraActivity$3.class 1KB
Camera1Control$3.class 1KB
MainActivity$5.class 1KB
IDCardActivity$1.class 1KB
IDCardActivity$2.class 1KB
R$drawable.class 1KB
Camera2Control$5.class 1KB
CameraActivity$1.class 1KB
Camera1Control$1$1.class 1KB
CameraActivity$7.class 1KB
CameraActivity$11.class 1KB
FrameOverlayView$1.class 1KB
CameraActivity$12.class 1KB
CameraView$1.class 1KB
CameraView$2.class 1KB
MainActivity$17.class 988B
MainActivity$18.class 988B
MainActivity$16.class 988B
MainActivity$14.class 988B
MainActivity$13.class 988B
MainActivity$19.class 988B
MainActivity$15.class 988B
MainActivity$20.class 988B
Camera1Control$5$1.class 926B
CameraActivity$9.class 906B
R.class 889B
CameraActivity$10.class 870B
R$styleable.class 763B
R$layout.class 754B
CameraThreadPool$1.class 750B
R$dimen.class 700B
共 229 条
- 1
- 2
- 3
资源评论
- CL2441412232019-08-02代码不错,谢谢分享!
- 君K2018-09-07不知道 好不不好用啊q2746260842019-08-03你都没用就给3星?程序员就这态度么
q274626084
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功