Android 使用百度雲文字識別之實現通用文字識別
阿新 • • 發佈:2019-02-04
今天給小夥伴們帶來的是如何使用百度雲api實現文字識別功能。
先上截圖
首介面,demo比較簡單
拍照
識別圖片內容
這就是整個demo的執行效果。
接下來我們看下專案結構,比較簡單整潔
接下來我大致說一下實現過程
首先我們需要去百度雲開放平臺註冊我們的開發者賬號
註冊地址
然後下載官方android sdk
接著我們需要在百度雲控制檯建立我們自己的運用
然後解壓我們下載的sdk
- (必須)將下載包libs目錄中的ocr-sdk.jar檔案拷貝到工程libs目錄中,並加入工程依賴。
- (必須)將libs目錄下armeabi,arm64-v8a,armeabi-v7a,x86資料夾按需新增到android studio工程
src/main/jniLibs
接下來開始寫我們的程式碼
首先在我們的MainActivity裡面初始化我們的orc,獲取token
/** * 用明文ak,sk初始化 */ private void initAccessTokenWithAkSk() { OCR.getInstance(this).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() { @Override public void onResult(AccessToken result) { String token = result.getAccessToken(); hasGotToken = true; } @Override public void onError(OCRError error) { error.printStackTrace(); alertText("AK,SK方式獲取token失敗", error.getMessage()); } }, getApplicationContext(), "請填入您的AK", "請填入您的SK"); }
這裡的ak和sk就是我們在控制檯建立運用的ak和sk
然後就是點選拍照按鈕
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { File outputImage = new File(Environment.getExternalStorageDirectory(), "tempImage" + ".jpg"); try { if (outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } imageUri = Uri.fromFile(outputImage); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PHOTO); } });
回撥拍照後的圖片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
Currency();
// startActivityForResult(intent, CROP_PHOTO); // 啟動裁剪程式
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
bitmap = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageUri));
Currency();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
}
}
最後一步,也是最核心的一步了。解析圖片進行文字識別
public void Currency(){
final StringBuffer sb=new StringBuffer();
// 通用文字識別引數設定
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
String str=getRealFilePath(this,imageUri);
Log.e("TGA",str+"------str-------------");
param.setImageFile(new File(getRealFilePath(this,imageUri)));
// 呼叫通用文字識別服務
OCR.getInstance(this).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
@Override
public void onResult(GeneralResult result) {
// 呼叫成功,返回GeneralResult物件
for (WordSimple wordSimple : result.getWordList()) {
// wordSimple不包含位置資訊
sb.append(wordSimple.getWords());
sb.append("\n");
}
txt.setText(sb.toString());
// json格式返回字串
// listener.onResult(result.getJsonRes());
}
@Override
public void onError(OCRError error) {
// 呼叫失敗,返回OCRError物件
}
});
}
至此,整個專案的講解已結束,感謝大家支援。