18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群


	
近日瀏覽網(wǎng)上一些圖片提取文字的網(wǎng)站,覺(jué)得甚是有趣,花費(fèi)半日也做了個(gè)在線圖片識(shí)別程序,完成了兩個(gè)技術(shù)方案的選擇,一是tesseract+python flask的方案實(shí)現(xiàn),二是tesseract+spring web的技術(shù)解決方案,并簡(jiǎn)作論述,與君共勉。

一、tesseract-ocr介紹

ocr含義是Optical Character Recognition,含義即視覺(jué)字符識(shí)別。而tesseract是該領(lǐng)域特別優(yōu)秀開源的作品。

官方的tesseract定義:

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

即tesseract包括一個(gè)視覺(jué)字符識(shí)別引擎libtesseract和命令行程序tesseract。

當(dāng)前最新穩(wěn)定版本是4.x.x基于LSTM,源碼可從找到tesseract的GitHub: tesseract.找到。

關(guān)于tesseract的工作模式如上圖所示。假設(shè)現(xiàn)在有一個(gè)圖片輸入,整個(gè)執(zhí)行流程為:

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

二、安裝tesseract

第一步下載

下載合適的exe安裝文件:

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

第二步環(huán)境變量配置

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

第三步安裝成功檢測(cè)

使用tesseract指令,顯示如下:

linux環(huán)境下載安裝與上述類似

下載leptonica 和 tesseract兩個(gè)包,解壓安裝,配置環(huán)境變量即可。網(wǎng)上很容易找到該安裝包。

三、使用命令行

1.tesseract + 圖片路徑 + 保存結(jié)果名 + -l 語(yǔ)言集

示列:tesseract 1606150081.png 1606150081 -l chi_sim

2.tesseract + 圖片路徑 +stdout -l +語(yǔ)言集

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

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

四、程序?qū)崿F(xiàn)(Python)

程序設(shè)計(jì)思路:

上傳圖片 -> 保存 ->對(duì)上傳的圖片執(zhí)行tesseract指令->獲取識(shí)別結(jié)果

只有二十多行代碼就實(shí)現(xiàn)了,so easy,以后網(wǎng)上看到圖片識(shí)別程序再也不會(huì)感覺(jué)神奇了吧!

關(guān)注Java核心技術(shù),推送更多 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)

五、程序?qū)崿F(xiàn)(Java)

不需要任何引入第三方j(luò)ar包,搭建一個(gè)簡(jiǎn)單的springboot web項(xiàng)目就可以了,沒(méi)有其他額外的依賴。

推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例: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。

六、實(shí)驗(yàn)測(cè)試

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

七、總結(jié)

圖片識(shí)別在當(dāng)今網(wǎng)絡(luò)技術(shù)領(lǐng)域是非常熱門的一塊,而這次完成的這個(gè)程序完全是依賴別人開源框架來(lái)完成了這個(gè)技術(shù)實(shí)現(xiàn),在應(yīng)用層面這是成功的,但是本質(zhì)上并沒(méi)有實(shí)際算法,技術(shù)核心上的東西,如果只關(guān)心應(yīng)用層開發(fā)上述解決了我們計(jì)算機(jī)在規(guī)則字符識(shí)別上的問(wèn)題。

上述代碼中基本沒(méi)有難點(diǎn),直接復(fù)制即可使用。此外,tesseract作為一款優(yōu)秀的開源字符識(shí)別軟件,但它也不是萬(wàn)能的,tesseract只能識(shí)別規(guī)則的字符,對(duì)于一些藝術(shù)字,抽象字它是無(wú)能為力的。
責(zé)任編輯:haq


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2992

    瀏覽量

    115198
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4925

    瀏覽量

    72441

原文標(biāo)題:Java 幾行代碼提取圖片文字,過(guò)個(gè)厲害了。。

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    淘寶圖片搜索接口開發(fā)實(shí)戰(zhàn): CNN 特征提取到商品匹配(附避坑手冊(cè) + 可復(fù)用代碼

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

    BootLoader app程序反復(fù)重啟,IAP升級(jí)失敗怎么處理?

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

    知乎開源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁(yè)面“秒開”

    ,交互延遲等核心痛點(diǎn),通過(guò)智能預(yù)測(cè)用戶瀏覽目標(biāo)進(jìn)行提前渲染,只需幾行代碼即可顯著提升復(fù)雜頁(yè)面的加載性能,實(shí)現(xiàn)“頁(yè)面秒開”的高效體驗(yàn),為鴻蒙開發(fā)者帶來(lái)開發(fā)效率和用戶體驗(yàn)的雙重飛躍。 隨著鴻蒙生態(tài)快速發(fā)展,應(yīng)用開發(fā)者難免會(huì)遇到一些性能問(wèn)題
    的頭像 發(fā)表于 08-29 14:32 ?393次閱讀
    知乎開源“智能預(yù)渲染框架” <b class='flag-5'>幾行</b><b class='flag-5'>代碼</b>實(shí)現(xiàn)鴻蒙應(yīng)用頁(yè)面“秒開”

    Perforce JRebel 簡(jiǎn)介:即時(shí)加載代碼變更,加速Java應(yīng)用開發(fā)

    Perforce JRebel 專為Java開發(fā)提速而生!支持跳過(guò)構(gòu)建與重新部署,實(shí)時(shí)加載代碼變更,支持100+框架,無(wú)縫集成主流IDE與應(yīng)用服務(wù)器。
    的頭像 發(fā)表于 08-14 14:35 ?405次閱讀
    Perforce JRebel 簡(jiǎn)介:即時(shí)加載<b class='flag-5'>代碼</b>變更,加速<b class='flag-5'>Java</b>應(yīng)用開發(fā)

    產(chǎn)品圖片上傳API接口

    的基本原理、實(shí)現(xiàn)方法、代碼示例及最佳實(shí)踐,幫助您構(gòu)建可靠高效的上傳功能。 1. 基本工作原理 產(chǎn)品圖片上傳API接口通?;赗ESTful架構(gòu)設(shè)計(jì),使用HTTP POST方法傳輸文件。當(dāng)用戶發(fā)起請(qǐng)求時(shí),API接收包含圖片數(shù)據(jù)的m
    的頭像 發(fā)表于 07-25 14:30 ?320次閱讀
    產(chǎn)品<b class='flag-5'>圖片</b>上傳API接口

    如何在dify中搭建OCR智能體

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

    如何使用USB2.0將數(shù)據(jù)fpga傳輸?shù)絇C?

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

    CodeBuddy 打造一款響應(yīng)式圖片畫廊

    圖片畫廊頁(yè)面來(lái)作為練手項(xiàng)目,目標(biāo)很明確:要實(shí)現(xiàn)不等高的 Masonry 布局,點(diǎn)擊圖片能彈出大圖預(yù)覽,還要能通過(guò)鍵盤切換圖片。理想狀態(tài)下,它還應(yīng)該支持無(wú)限滾動(dòng)加載,并提供分類篩選功能。光想想就覺(jué)得挺麻煩的,但我決定用 Code
    的頭像 發(fā)表于 05-11 13:33 ?425次閱讀
    CodeBuddy 打造一款響應(yīng)式<b class='flag-5'>圖片</b>畫廊

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

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

    Java 到 Go:面向?qū)ο蟮木奕伺c云原生的輕騎兵

    Go 語(yǔ)言在 2009 年被 Google 推出,在創(chuàng)建之初便明確提出了“少即是多(Less is more)”的設(shè)計(jì)原則,強(qiáng)調(diào)“以工程效率為核心,用極簡(jiǎn)規(guī)則解決復(fù)雜問(wèn)題”。它與 Java 語(yǔ)言生態(tài)
    的頭像 發(fā)表于 04-25 11:13 ?432次閱讀

    怎么使用代碼控制DLP4500投影圖片?

    最近在研究怎么使用代碼控制DLP4500投影圖片。看網(wǎng)上說(shuō)可以參考dlp4500_test.zip這個(gè)文件,但是我沒(méi)有在網(wǎng)上找到這個(gè)文件。 能麻煩分享一個(gè)下載連接嘛?
    發(fā)表于 02-27 06:34

    SSM框架在Java開發(fā)中的應(yīng)用 如何使用SSM進(jìn)行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術(shù)棧。它通過(guò)分層架構(gòu),實(shí)現(xiàn)了視圖、控制、業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)的分離,提高了代碼的可維護(hù)性和可擴(kuò)展性
    的頭像 發(fā)表于 12-16 17:28 ?1981次閱讀

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語(yǔ)言功能、核心 API 以及 JVM,同時(shí)適合新的 Java 開發(fā)者和高級(jí)開發(fā)者。?IntelliJ IDEA 2024.2?開始已支持
    的頭像 發(fā)表于 12-04 10:02 ?1350次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java代碼之美,遵循樣式規(guī)范開始

    作者:京東零售 劉仲偉 在軟件開發(fā)的世界里,代碼不僅是程序的基石,更是程序員交流的通用語(yǔ)言。而Java,作為一門廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用的編程語(yǔ)言,其代碼的可讀性和一致性對(duì)于項(xiàng)目的長(zhǎng)期維護(hù)和團(tuán)隊(duì)協(xié)作
    的頭像 發(fā)表于 11-27 11:42 ?780次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>代碼</b>之美,<b class='flag-5'>從</b>遵循樣式規(guī)范開始

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?1870次閱讀