国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用Java幾行代碼從圖片提取文字

Android編程精選 ? 來源:CSDN博客 ? 作者:興趣使然的程序猿 ? 2021-10-28 14:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


	
近日瀏覽網上一些圖片提取文字的網站,覺得甚是有趣,花費半日也做了個在線圖片識別程序,完成了兩個技術方案的選擇,一是tesseract+python flask的方案實現,二是tesseract+spring web的技術解決方案,并簡作論述,與君共勉。

一、tesseract-ocr介紹

ocr含義是Optical Character Recognition,含義即視覺字符識別。而tesseract是該領域特別優秀開源的作品。

官方的tesseract定義:

OCR engine - libtesseract and a command line program - tesseract.

即tesseract包括一個視覺字符識別引擎libtesseract和命令行程序tesseract。

當前最新穩定版本是4.x.x基于LSTM,源碼可從找到tesseract的GitHub: tesseract.找到。

關于tesseract的工作模式如上圖所示。假設現在有一個圖片輸入,整個執行流程為:

  1. 輸入(一張圖片)
  2. 有用信息提取(比如一個圖片上只有一個字,那其他留白的是無用,這個字上每個色素是有效的并且相關)
  3. 找出文字/線條
  4. 字符分類集
  5. 輸入與分類集對比找出最接近的
  6. 輸出識別結果

二、安裝tesseract

第一步下載

下載合適的exe安裝文件:

網址:https://digi.bib.uni-mannheim.de/tesseract/,下載完成后后裝即可

第二步環境變量配置

在path變量中加入tesseract-ocr的安裝路徑

第三步安裝成功檢測

使用tesseract指令,顯示如下:

linux環境下載安裝與上述類似

下載leptonica 和 tesseract兩個包,解壓安裝,配置環境變量即可。網上很容易找到該安裝包。

三、使用命令行

1.tesseract + 圖片路徑 + 保存結果名 + -l 語言集

示列:tesseract 1606150081.png 1606150081 -l chi_sim

2.tesseract + 圖片路徑 +stdout -l +語言集

示列:tesseract D:company uigushopspring-2s est.png stdout -l chi_sim

有了上述之后就可以完成web圖片識別程序的開發啦,廢話不多說,直接上代碼。

四、程序實現(Python)

程序設計思路:

上傳圖片 -> 保存 ->對上傳的圖片執行tesseract指令->獲取識別結果

只有二十多行代碼就實現了,so easy,以后網上看到圖片識別程序再也不會感覺神奇了吧!

關注Java核心技術,推送更多 Java 干貨!76f796be-3762-11ec-82a8-dac502259ad0.png

#coding=utf-8
fromflaskimportFlask,request
importos
importdatetime
importtime

app=Flask(__name__)

defget_time_stamp():
times=datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')
array=time.strptime(times,"%Y-%m-%d%H:%M:%S")
time_stamp=int(time.mktime(array))
returntime_stamp

@app.route('/image/extract',methods=['POST'])
defpure_rec():
file=request.files.get('file')
ts=str(get_time_stamp())
up_path=os.path.join(ts+file.filename)
file.save(up_path)
cmd="tesseract"+up_path+""+ts+"-lchi_sim"
print(cmd)
os.system(cmd)
withopen(ts+".txt",'r+',encoding="utf-8")asf:
result=f.read()
returnresult

if__name__=='__main__':
app.run(debug=True)

五、程序實現(Java)

不需要任何引入第三方jar包,搭建一個簡單的springboot web項目就可以了,沒有其他額外的依賴。

推薦一個 Spring Boot 基礎教程及實戰示例:https://www.javastack.cn/categories/Spring-Boot/

Controller:

packagecom.lbh.web.controller;

/*
*Copyright@lbhbinhao@163.com
*Author:liubinhao
*Date:2020/11/23
*++++______@authorliubinhao____________
*+++//|//|//|
*+/_____/|/_____/|/_____/|
*|||||||||
*||||||________|||
*|||||/|||
*|||||/___________|||
*|||___________________||____________|||
*||//|||||||
*||/_________________//||/||/
*|_________________________|/b|_____|/|_____|/
*/
importorg.springframework.web.bind.annotation.PostMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.multipart.MultipartFile;

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;

@RestController
publicclassLiteralExtractController{

@PostMapping("/image/extract")
publicStringreg(@RequestParam("file")MultipartFilefile)throwsIOException{
Stringresult="";
Stringfilename=file.getOriginalFilename();
Filesave=newFile(System.getProperty("user.dir")+""+filename);
if(!save.exists()){
save.createNewFile();
}
file.transferTo(save);
Stringcmd=String.format("tesseract%sstdout-l%s",System.getProperty("user.dir")+""+filename,"chi_sim");
result=cmd(cmd);
returnresult;
}

publicstaticStringcmd(Stringcmd){
BufferedReaderbr=null;
try{
Processp=Runtime.getRuntime().exec(cmd);
br=newBufferedReader(newInputStreamReader(p.getInputStream()));
Stringline=null;
StringBuildersb=newStringBuilder();
while((line=br.readLine())!=null){
sb.append(line+"
");
}
returnsb.toString();
}catch(Exceptione){
e.printStackTrace();
}
finally
{
if(br!=null)
{
try{
br.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
returnnull;
}
}

哈哈哈,還有帥氣的程序logo。

六、實驗測試

很簡單二十多行代碼就完成了,看看效果怎么樣吧。

七、總結

圖片識別在當今網絡技術領域是非常熱門的一塊,而這次完成的這個程序完全是依賴別人開源框架來完成了這個技術實現,在應用層面這是成功的,但是本質上并沒有實際算法,技術核心上的東西,如果只關心應用層開發上述解決了我們計算機在規則字符識別上的問題。

上述代碼中基本沒有難點,直接復制即可使用。此外,tesseract作為一款優秀的開源字符識別軟件,但它也不是萬能的,tesseract只能識別規則的字符,對于一些藝術字,抽象字它是無能為力的。
責任編輯:haq


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116419
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73955

原文標題:Java 幾行代碼提取圖片文字,過個厲害了。。

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    釘釘正式開源HarmonyOS圖片編輯組件

    ArkTS語言開發,提供了畫板、馬賽克、裁剪、文字四大核心圖像處理能力,助力開發者以低代碼成本、高集成效率,為應用構建功能完整、交互流暢的圖片編輯體驗。
    的頭像 發表于 01-05 09:58 ?494次閱讀

    Arm Neoverse CPU上大代碼Java應用的性能測試

    Java 是互聯網領域廣泛使用的編程語言。Java 應用的一些特性使其性能表現與提前編譯的原生應用(例如 C 程序)大相徑庭。由于 Java 字節碼無法直接在 CPU 上執行,因此通常運行時在
    的頭像 發表于 11-05 11:25 ?752次閱讀
    Arm Neoverse CPU上大<b class='flag-5'>代碼</b>量<b class='flag-5'>Java</b>應用的性能測試

    Java 25正式發布,重要特性詳解(附代碼示例):靈活構造函數體、模塊導入聲明、AOT方法分析等

    Java 25現已發布,更多新特性來了!配合Perforce JRebel,代碼修改即時生效,無需重啟服務,即可實現“改完就看效果”。新特性+快工具,讓你的Java開發體驗雙倍提升!
    的頭像 發表于 10-29 13:16 ?1389次閱讀
    <b class='flag-5'>Java</b> 25正式發布,重要特性詳解(附<b class='flag-5'>代碼</b>示例):靈活構造函數體、模塊導入聲明、AOT方法分析等

    淘寶圖片搜索接口開發實戰: CNN 特征提取到商品匹配(附避坑手冊 + 可復用代碼

    本文詳解淘寶圖片搜索接口開發全流程,涵蓋CNN特征提取、商品匹配、參數配置及400/429等高頻報錯解決方案,附合規避坑指南與可復用代碼,助你高效實現圖像搜商品功能。
    的頭像 發表于 10-21 10:03 ?533次閱讀

    商品圖片批量上傳接口設計與實現

    設計、實現步驟、代碼示例、錯誤處理和性能優化。文章基于Python Flask框架,確保內容真實可靠,適合開發者快速上手。 1. 接口設計概述 一個標準的商品圖片批量上傳接口應遵循RESTful原則,使用HTTP POST方法。關鍵設計點包括: 端點定義:例
    的頭像 發表于 10-13 15:25 ?443次閱讀

    BootLoader app程序反復重啟,IAP升級失敗怎么處理?

    keil開發的BootLoader程序,用RT-Thread Studio開發的app程序,板子每次上電后,BootLoader程序跳轉到app程序,就打印幾行RT-Thread的日志,然后就反復重啟:先執行BootLoader程序,再執行app程序打印
    發表于 09-10 07:36

    知乎開源“智能預渲染框架” 幾行代碼實現鴻蒙應用頁面“秒開”

    ,交互延遲等核心痛點,通過智能預測用戶瀏覽目標進行提前渲染,只需幾行代碼即可顯著提升復雜頁面的加載性能,實現“頁面秒開”的高效體驗,為鴻蒙開發者帶來開發效率和用戶體驗的雙重飛躍。 隨著鴻蒙生態快速發展,應用開發者難免會遇到一些性能問題
    的頭像 發表于 08-29 14:32 ?627次閱讀
    知乎開源“智能預渲染框架” <b class='flag-5'>幾行</b><b class='flag-5'>代碼</b>實現鴻蒙應用頁面“秒開”

    Perforce JRebel 簡介:即時加載代碼變更,加速Java應用開發

    Perforce JRebel 專為Java開發提速而生!支持跳過構建與重新部署,實時加載代碼變更,支持100+框架,無縫集成主流IDE與應用服務器。
    的頭像 發表于 08-14 14:35 ?735次閱讀
    Perforce JRebel 簡介:即時加載<b class='flag-5'>代碼</b>變更,加速<b class='flag-5'>Java</b>應用開發

    產品圖片上傳API接口

    的基本原理、實現方法、代碼示例及最佳實踐,幫助您構建可靠高效的上傳功能。 1. 基本工作原理 產品圖片上傳API接口通常基于RESTful架構設計,使用HTTP POST方法傳輸文件。當用戶發起請求時,API接收包含圖片數據的m
    的頭像 發表于 07-25 14:30 ?681次閱讀
    產品<b class='flag-5'>圖片</b>上傳API接口

    端側OCR文字識別實現 -- Core Vision Kit ##HarmonyOS SDK AI##

    ,使用場景中就包括了“通用文字識別”,即我們前文中所說的ocr功能。 其整體流程概括為: 首先通過各種方法得到一張圖片,例如拍照、相冊中選擇、甚至你也可以通過canvas畫布生成的圖片
    發表于 06-30 18:07

    如何在dify中搭建OCR智能體

    企業在日常運營中面臨合同、票據、手寫筆記等多種文檔的處理需求,這些文檔常以圖片或掃描件形式存在,文字提取困難,嚴重制約數字化管理效率。
    的頭像 發表于 06-27 14:19 ?5212次閱讀

    如何使用USB2.0將數據fpga傳輸到PC?

    : Input/Output Error您CAN 幫助我找到此錯誤的解決方案,以便 CAN 將數據 fpga 發送到計算機?在此先感謝。 告訴我是否需要查看 JAVA 代碼和 vhdl 項目。 預先謝謝
    發表于 05-29 06:28

    CodeBuddy 打造一款響應式圖片畫廊

    圖片畫廊頁面來作為練手項目,目標很明確:要實現不等高的 Masonry 布局,點擊圖片能彈出大圖預覽,還要能通過鍵盤切換圖片。理想狀態下,它還應該支持無限滾動加載,并提供分類篩選功能。光想想就覺得挺麻煩的,但我決定用 Code
    的頭像 發表于 05-11 13:33 ?641次閱讀
    CodeBuddy 打造一款響應式<b class='flag-5'>圖片</b>畫廊

    Java開發者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發者在用?

    Perforce JRebel是一款Java開發效率工具,旨在幫助java開發人員更快地編寫更好的應用程序。JRebel可即時重新加載對代碼的修改,無需重啟或重新部署應用程序,就能讓開發者即時看到
    的頭像 發表于 04-27 13:44 ?844次閱讀
    <b class='flag-5'>Java</b>開發者必備的效率工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開發者在用?

    Java 到 Go:面向對象的巨人與云原生的輕騎兵

    Go 語言在 2009 年被 Google 推出,在創建之初便明確提出了“少即是多(Less is more)”的設計原則,強調“以工程效率為核心,用極簡規則解決復雜問題”。它與 Java 語言生態
    的頭像 發表于 04-25 11:13 ?643次閱讀