1. 程式人生 > >php實現ocr文字識別

php實現ocr文字識別

OCR的百度定義 (Optical Character Recognition,光學字元識別)是指電子裝置(例如掃描器或數碼相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程;即,針對印刷體字元,採用光學的方式將紙質文件中的文字轉換成為黑白點陣的影象檔案,並通過識別軟體將影象中的文字轉換成文字格式,供文書處理軟體進一步編輯加工的技術。

作為一個工程師,在實際程式設計中,可能需要把圖片中的文字顯示出來,這就需要用到ocr技術。因為php開發,所以優先選擇php,找了php的ocr擴充套件測試了下,結果發現不可用(地址:http://sourceforge.net/projects/phpocr.berlios

)?網上也看了很多朋友的demo,基本上原理都是對圖片分解成0,1矩陣,然後根據特徵,轉化成相應的字串。測試幾個都是不可行的。然後看到別人說PHP搞OCR的很少,也不適合,語言效率太低,這種演算法需要很高的效率。可以嘗試C,MATLAB 等的OCR演算法。搞matlab的玩OCR這類偏演算法的很多。

寫了個玩下:

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. function curl($img){
  4. $ch = curl_init();
  5. $url ='http://apis.baidu.com/apistore/idlocr/ocr'
    ;//百度ocr api
  6. $header = array(
  7. 'Content-Type:application/x-www-form-urlencoded',
  8. 'apikey:69c2ace1ef297ce88869f0751cb1b618',
  9. );
  10. $data_temp = file_get_contents($img);
  11. $data_temp = urlencode(base64_encode($data_temp));
  12. //封裝必要引數
  13. $data ="fromdevice=pc&clientip=127.0.0.1&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="
    .$data_temp;
  14. curl_setopt($ch, CURLOPT_HTTPHEADER , $header);// 新增apikey到header
  15. curl_setopt($ch, CURLOPT_POST,1);
  16. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);// 新增引數
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  18. curl_setopt($ch , CURLOPT_URL , $url);// 執行HTTP請求
  19. $res = curl_exec($ch);
  20. if($res === FALSE){
  21. echo "cURL Error: ". curl_error($ch);
  22. }
  23. curl_close($ch);
  24. $temp_var = json_decode($res,true);
  25. return $temp_var;
  26. }
  27. $wordArr = curl('4.jpg');
  28. if($wordArr['errNum']==0){
  29. var_dump($wordArr);
  30. }else{
  31. echo "識別出錯:".$wordArr["errMsg"];
  32. }

測試了幾張圖片,準確度還是蠻高的。百分百的話,是不現實的~