2

AndroidにOCRを実装したい。つまり、名刺の画像からテキストを取得します。hereのコードを使用しました。

しかし、このコードを実行すると、次のエラーが発生しました。

java.lang.NoClassDefFoundError: org.apache.http.entity.mime.content.FileBody

次の行を指していると思います。

final FileBody image = new FileBody(new File(filePath));

OCRServiceAPIクラスの。どうすればこれを修正できますか?

4

3 に答える 3

2

上記のエラーについて推測することはできませんが、 PHPサーバー上の OCR のサードパーティ アプリケーションABBYY製品を使用して、 Blackberryでこのタスクを実行しました。

私の長い間、R & DI はGithub_Abbyyの以下のリンクにも取り組んできました。このコードを使用するには、ocrsdk.comで無料のアカウントを作成する必要があります。

于 2013-01-02T12:13:46.587 に答える
0

Android ではすべての Apache パッケージがデフォルトで利用できるわけではないため、Apache リポジトリからダウンロードして自分で含める必要があります。Android ライブラリが見つからないという質問と、その回答で提供されているリンクを参照してください。

編集: 具体的には、org.apache.http.entity のサブパッケージは含まれず、エンティティ パッケージ自体のみが含まれます。

OCR API によって提供されるサンプル プロジェクトでは、mime パッケージをlib フォルダーの jar に配置しました。

于 2013-01-02T12:19:25.907 に答える
0

ギャラリーから選択している画像の正しいパスを取得しているかどうかを確認してください。

私もこのデモを試してみましたが、うまくいきました。

ここに私のコードを投稿しています:

  • OCRServiceAPI.java

    public class OCRServiceAPI {  
    public final String m_serviceUrl = "http://api.ocrapiservice.com/1.0/rest/ocr";
    private final String m_paramImage = "image";
    private final String m_paramLanguage = "language";
    private final String m_paramApiKey = "apikey";
    private String m_apiKey, m_responseText;
    private int m_responseCode; 
    public OCRServiceAPI(final String p_apiKey) {
        this.m_apiKey = p_apiKey;
    }
    /*
     * Convert image to text.
     * 
     * @param language The image text language.
     * 
     * @param filePath The image absolute file path.
     * 
     * @return true if everything went okay and false if there is an error with
     * sending and receiving data.
     */
    public boolean convertToText(final String p_language,
            final String p_filePath) {
        try {
            sendImage(p_language, p_filePath);
            return true;
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /*
     * Send image to OCR service and read response.
     * 
     * @param language The image text language.
     * 
     * @param filePath The image absolute file path.
     */
    private void sendImage(final String p_language, final String p_filePath)
            throws ClientProtocolException, IOException {
        final HttpClient m_httpclient = new DefaultHttpClient();
        final HttpPost m_httppost = new HttpPost(m_serviceUrl);
        final FileBody m_image = new FileBody(new File(p_filePath));
        final MultipartEntity m_reqEntity = new MultipartEntity();
        m_reqEntity.addPart(m_paramImage, m_image);
        m_reqEntity.addPart(m_paramLanguage, new StringBody(p_language));
        m_reqEntity.addPart(m_paramApiKey, new StringBody(getApiKey()));
        m_httppost.setEntity(m_reqEntity);
        final HttpResponse m_response = m_httpclient.execute(m_httppost);
        final HttpEntity m_resEntity = m_response.getEntity();
        final StringBuilder m_sb = new StringBuilder();
        if (m_resEntity != null) {
            final InputStream m_stream = m_resEntity.getContent();
            byte m_bytes[] = new byte[4096];
            int m_numBytes;
            while ((m_numBytes = m_stream.read(m_bytes)) != -1) {
                if (m_numBytes != 0) {
                    m_sb.append(new String(m_bytes, 0, m_numBytes));
                }
            }
        }
        setResponseCode(m_response.getStatusLine().getStatusCode());
        setResponseText(m_sb.toString());
    }
    public int getResponseCode() {
        return m_responseCode;
    }
    public void setResponseCode(int p_responseCode) {
        this.m_responseCode = p_responseCode;
    }
    public String getResponseText() {
        return m_responseText;
    }
    public void setResponseText(String p_responseText) {
        this.m_responseText = p_responseText;
    }
    public String getApiKey() {
        return m_apiKey;
    }
    public void setApiKey(String p_apiKey) {
        this.m_apiKey = p_apiKey;
    }   }
    
  • SampleActivity.java

    public class SampleActivity extends Activity implements OnClickListener {
    private final int RESPONSE_OK = 200;
    private final int IMAGE_PICKER_REQUEST = 1;
    private TextView m_tvPicNameText;
    private EditText m_etLangCodeField, m_etApiKeyFiled;
    private String m_apiKey; // T7GNRh7VmH
    private String m_langCode; // en
    private String m_fileName;
    @Override
    public void onCreate(Bundle p_savedInstanceState) {
        super.onCreate(p_savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        m_tvPicNameText = (TextView) findViewById(R.id.imageName);
        m_etLangCodeField = (EditText) findViewById(R.id.lanuageCode);
        m_etApiKeyFiled = (EditText) findViewById(R.id.apiKey);
        m_etApiKeyFiled.setText("T7GNRh7VmH");
        final Button m_btnPickImage = (Button) findViewById(R.id.picImagebutton);
        m_btnPickImage.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Starting image picker activity
                startActivityForResult(
                        new Intent(
                                Intent.ACTION_PICK,
                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI),
                        IMAGE_PICKER_REQUEST);
            }
        });
        final Button m_btnConvertText = (Button) findViewById(R.id.convert);
        m_btnConvertText.setOnClickListener(this);
    }
    public void onClick(View p_v) {
        m_apiKey = m_etApiKeyFiled.getText().toString();
        m_langCode = m_etLangCodeField.getText().toString();
        // Checking are all fields set
        if (m_fileName != null && !m_apiKey.equals("")
                && !m_langCode.equals("")) {
            final ProgressDialog m_prgDialog = ProgressDialog.show(
                    SampleActivity.this, "Loading ...", "Converting to text.",
                    true, false);
            final Thread m_thread = new Thread(new Runnable() {
                public void run() {
                    final OCRServiceAPI m_apiClient = new OCRServiceAPI(
                            m_apiKey);
                    m_apiClient.convertToText(m_langCode, m_fileName);
                    // Doing UI related code in UI thread
                    runOnUiThread(new Runnable() {
                        public void run() {
                            m_prgDialog.dismiss();
                            // Showing response dialog
                            final AlertDialog.Builder m_alert = new AlertDialog.Builder(
                                    SampleActivity.this);
                            m_alert.setMessage(m_apiClient.getResponseText());
                            m_alert.setPositiveButton("OK",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(
                                                DialogInterface p_dialog,
                                                int p_id) {
                                        }
                                    });
                            // Setting dialog title related from response code
                            if (m_apiClient.getResponseCode() == RESPONSE_OK) {
                                m_alert.setTitle("Success");
                            } else {
                                m_alert.setTitle("Faild");
                            }
                            m_alert.show();
                        }
                    });
                }
            });
            m_thread.start();
        } else {
            Toast.makeText(SampleActivity.this, "All data are required.",
                    Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    protected void onActivityResult(int p_requestCode, int p_resultCode,
            Intent p_data) {
        super.onActivityResult(p_requestCode, p_resultCode, p_data);
        if (p_requestCode == IMAGE_PICKER_REQUEST && p_resultCode == RESULT_OK) {
            m_fileName = getRealPathFromURI(p_data.getData());
            m_tvPicNameText.setText("Selected: en"
                    + getStringNameFromRealPath(m_fileName));
        }
    }
    /*
     * Returns image real path.
     */
    private String getRealPathFromURI(final Uri p_contentUri) {
        final String[] m_proj = { MediaStore.Images.Media.DATA };
        final Cursor m_cursor = managedQuery(p_contentUri, m_proj, null, null,
                null);
        int m_columnIndex = m_cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        m_cursor.moveToFirst();
        return m_cursor.getString(m_columnIndex);
    }
    /*
     * Cuts selected file name from real path to show in screen.
     */
    private String getStringNameFromRealPath(final String bucketName) {
        return bucketName.lastIndexOf('/') > 0 ? bucketName
                .substring(bucketName.lastIndexOf('/') + 1) : bucketName;
    }   }
    
于 2013-01-02T12:13:10.280 に答える