Android Studio调用百度API(图片文字识别)

1、登录百度AI平台(https://ai.baidu.com/),下载license文件

包名填写内容:

下载好的文件夹内包含四个文件

(OCR-Android-SDK.md文件里有使用说明)

(1)将libs文件夹下的ocr-sdk.jar拷贝到工程目录中

找到工程存储的文件夹,依次打开app -> libs -> 将jar包拷贝到libs文件夹下

(2)加入工程依赖

File -> Project Structure -> Dependencies -> (在Modules栏)选中app -> (在Declared Dependencies栏)点击“+” -> 选择“jar dependence”

选中刚才导入的jar

(3)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中

(4)将在百度平台上下载下来的api.license文件添加到工程的assets文件夹

找到工程所在的文件夹,依次打开app -> src -> main-> 新建文件夹 assets -> 将license文件放在assets文件夹中

2、在AndroidManifest.xml中添加以下权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3、在oncreate()方法里初始化OCR单例

//初始化OCR单例/
            OCR.getInstance(getApplication()).initAccessToken(new OnResultListener() {
            public void onResult(AccessToken result) {
                // 调用成功,getApplication()返回AccessToken对象
                String token = result.getAccessToken();
            }
            @Override
            public void onResult(Object o) {
            }
            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError子类SDKError对象
                } }, getApplicationContext());
//

在oncreate()方法里定义按钮的点击事件

gray=findViewById(R.id.gray);
        gray.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //convert2Gray();
                //ocrNormal();
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                File outImage=new File(getExternalCacheDir(),timeStamp+"output_image.jpg");
                try{
                    if(outImage.exists())
                    {
                        outImage.delete();
                    }
                    outImage.createNewFile();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
                if(Build.VERSION.SDK_INT>=24)
                {
                    uri= FileProvider.getUriForFile(MainActivity.this,"com.example.demo_tryopencv_2.fileprovider",outImage);
                }
                else
                {
                    uri=Uri.fromFile(outImage);
                }
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                startActivityForResult(intent,TAKE_POTHO);
            }
        });
        /

代码展示(先调用摄像头拍摄,再将拍摄图片用来识别文字)

 /**
     * 拍照
     */

        @Override
        protected void onActivityResult(int requestCode,int resultCode,Intent data)
        {
            if (Build.VERSION.SDK_INT >= 23) {
                int REQUEST_CODE_CONTACT = 101;
                String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
                //验证是否许可权限
                for (String str : permissions) {
                    if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                        //申请权限
                        this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
                    }
                }
            }
            super.onActivityResult(requestCode,resultCode,data);
            switch (requestCode)
            {
                case TAKE_POTHO:
                    if(resultCode==RESULT_OK)
                    {
                        try{
                            Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
                            pic=(ImageView)findViewById(R.id.pic);
                            pic.setImageBitmap(bitmap);
                            ocrNormal(bitmap);
                        }catch (FileNotFoundException e)
                        {
                            e.printStackTrace();
                        }
                    }
                    break;
                default:
                    break;
            }
        }

public  File compressImage(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
       /* int options = 100;
        while (baos.toByteArray().length / 1024 > 20) {  //循环判断如果压缩后图片是否大于20kb,大于继续压缩 友盟缩略图要求不大于18kb
            baos.reset();//重置baos即清空baos
            options -= 10;//每次都减少10
            bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
            long length = baos.toByteArray().length;
        }*/
        if (Build.VERSION.SDK_INT >= 23) {
            int REQUEST_CODE_CONTACT = 101;
            String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
            //验证是否许可权限
            for (String str : permissions) {
                if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                    //申请权限
                    this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
                }
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date(System.currentTimeMillis());
        //图片名
        String filename = format.format(date);
        File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            try {
                fos.write(baos.toByteArray());
                fos.flush();
                fos.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }

        Log.d("=-=-=-=-=-", "compressImage: " + file);
        // recycleBitmap(bitmap);
        return file;
    }

    private void ocrNormal(Bitmap bitmap) {
        text=findViewById(R.id.text);
                // 通用文字识别参数设置
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
                //这里调用的是本地文件,使用时替换成你的本地文件
            File file;


        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date(System.currentTimeMillis());
        //图片名
        String filename = format.format(date);
        file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            try {
                fos.write(baos.toByteArray());
                fos.flush();
                fos.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }

            param.setImageFile(file);
            // 调用通用文字识别服务
            OCR.getInstance(getApplication()).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {
                @Override
                public void onResult(GeneralResult result) {
                    StringBuilder sb = new StringBuilder();
                    // 调用成功,返回GeneralResult对象
                    for (WordSimple wordSimple : result.getWordList()) {
                        // wordSimple不包含位置信息
                        WordSimple word = wordSimple;
                        sb.append(word.getWords());
                        //sb.append("\n");
                    }
                    //file.delete();
                    //String返回
                    String ocrResult = sb.toString();
                    Log.v("4","===================================="+ocrResult);
                    // json格式返回字符串result.getJsonRes())
                   // text.setText(ocrResult);
                    text.setText("成功了一大半"+ocrResult+"lalala");
                }

                @Override
                public void onError(OCRError error) {
                    // 调用失败,返回OCRError对象
                    text.setText("出错啦");
                    Log.v("1","================================================"+error.getLocalizedMessage());
                    Log.v("2","================================================"+error.getMessage());
                    Log.v("3","================================================"+error.getErrorCode());
                }
            });
    }

 

 

 

  • 2
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是在 Android Studio调用百度 API 进行文字转语音的代码示例: 1. 在 build.gradle 中添加依赖: ``` implementation 'com.baidu.android:bd-speech:1.0.0.12' ``` 2. 在布局文件中添加一个按钮和一个 EditText: ``` <Button android:id="@+id/btn_speak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Speak"/> <EditText android:id="@+id/et_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Input text to speak"/> ``` 3. 在 MainActivity.java 中添加以下代码: ```java import com.baidu.tts.client.SpeechSynthesizer; import com.baidu.tts.client.TtsMode; public class MainActivity extends AppCompatActivity { private Button btnSpeak; private EditText etText; private SpeechSynthesizer mSpeechSynthesizer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化按钮和 EditText btnSpeak = findViewById(R.id.btn_speak); etText = findViewById(R.id.et_text); // 初始化语音合成对象 mSpeechSynthesizer = SpeechSynthesizer.getInstance(); mSpeechSynthesizer.setContext(this); mSpeechSynthesizer.setAppId("your_app_id"); // 替换为自己的 App ID mSpeechSynthesizer.setApiKey("your_api_key"); // 替换为自己的 API Key mSpeechSynthesizer.setSecretKey("your_secret_key"); // 替换为自己的 Secret Key mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0"); // 设置为女声 mSpeechSynthesizer.initTts(TtsMode.MIX); // 初始化合成引擎 // 点击按钮进行语音合成 btnSpeak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String text = etText.getText().toString(); mSpeechSynthesizer.speak(text); } }); } @Override protected void onDestroy() { super.onDestroy(); mSpeechSynthesizer.release(); // 释放合成引擎 } } ``` 注意替换 `setAppId`、`setApiKey` 和 `setSecretKey` 方法中的参数为自己在百度开发者平台申请的 App ID、API Key 和 Secret Key。此外,还可以通过 `setParam` 方法设置语音合成的参数,例如设置说话人和语速等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值