2. OCR - waterglass2s/GraduationProject GitHub Wiki
Android Studio compileSdkVersion 29 / buildToolsVersion 29.0.3
google vision API - 17.0.0
Before you start, You have to make 'Google cloud project' (*Make sure that billing is enabled for your Cloud project)
- At your project console,
enable the Mobile Vision API - Create a service account
- Create a service account key
- Add dependencies at build.gradle
ex)implementation 'com.google.android.gms:play-services-vision:17.0.0'
--> More information,Click here
Then, you can use OCR at Android Studio.
- First define view
cameraView = (SurfaceView)findViewById(R.id.surface_view);
textView = (TextView)findViewById(R.id.text_view);- Get Camera source
TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();
if(!textRecognizer.isOperational())
{
Log.w("MainActivity","Detector dependencies are not yet available");
}
else{
cameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1280,1024)
.setRequestedFps(2.0f)
.setAutoFocusEnabled(true)
.build();
cameraView.getHolder().addCallback(new SurfaceHolder.Callback(){
@Override
public void surfaceCreated(SurfaceHolder holder) {
try{
if(ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(com.example.graduationproject.ocr.MainActivity.this,
new String[]{Manifest.permission.CAMERA},
RequestCameraPermissionID);
return;
}
cameraSource.start(cameraView.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cameraSource.stop();
}
});
textRecognizer.setProcessor(new Detector.Processor<TextBlock>() {
@Override
public void release() {
}- When gets the result
@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
final SparseArray<TextBlock> items = detections.getDetectedItems();
if(items.size() != 0){
textView.post(new Runnable() {
@Override
public void run() {
//if you want to check result, get here
}
}
});
}
}