欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

Android編程精選 ? 來源:CSDN博客 ? 作者:興趣使然的程序猿 ? 2021-10-28 14:05 ? 次閱讀

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

一、tesseract-ocr介紹

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

官方的tesseract定義:

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

即tesseract包括一個(gè)視覺字符識別引擎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è)字,那其他留白的是無用,這個(gè)字上每個(gè)色素是有效的并且相關(guān))
  3. 找出文字/線條
  4. 字符分類集
  5. 輸入與分類集對比找出最接近的
  6. 輸出識別結(jié)果

二、安裝tesseract

第一步下載

下載合適的exe安裝文件:

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

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

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

第三步安裝成功檢測

使用tesseract指令,顯示如下:

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

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

三、使用命令行

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

示列:tesseract 1606150081.png 1606150081 -l chi_sim

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

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

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

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

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

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

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

關(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è)簡單的springboot web項(xiàng)目就可以了,沒有其他額外的依賴。

推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:https://www.javastack.cn/categories/Spring-Boot/

Controller:

packagecom.lbh.web.controller;

/*
*Copyright@[email protected]
*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)測試

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

七、總結(jié)

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

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


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

    關(guān)注

    19

    文章

    2976

    瀏覽量

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

    關(guān)注

    30

    文章

    4837

    瀏覽量

    69129

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    Java 23功能介紹

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

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

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

    對比Python與Java編程語言

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

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回Java代碼的過程。雖然反編譯可以幫助理解代碼的邏輯和結(jié)構(gòu),但它并不
    的頭像 發(fā)表于 09-02 11:03 ?1207次閱讀

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼的過程。反編譯后的代碼可以進(jìn)行修改,但是需要注意,反編譯代碼的質(zhì)
    的頭像 發(fā)表于 09-02 11:00 ?836次閱讀

    【《時(shí)間序列與機(jī)器學(xué)習(xí)》閱讀體驗(yàn)】+ 時(shí)間序列的信息提取

    之前對《時(shí)間序列與機(jī)器學(xué)習(xí)》一書進(jìn)行了整體瀏覽,并且非常輕松愉快的完成了第一章的學(xué)習(xí),今天開始學(xué)習(xí)第二章“時(shí)間序列的信息提取”。 先粗略的翻閱第二章,內(nèi)容復(fù)雜,充斥了大量的定義、推導(dǎo)計(jì)算、代碼,好在
    發(fā)表于 08-14 18:00

    OPA189怎么交流信號中提取直流信號?

    有一個(gè)頻率固定25khz的類似sin波形,這個(gè)波形的直流分量是會變的,DC直流變動的范圍大概是1-3V?,F(xiàn)在想提取這個(gè)直流分量并送入ADC采集,經(jīng)過一些列信號濾波處理后(濾波的截至頻率在10khz
    發(fā)表于 07-31 08:04

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們在功能、用途和實(shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語言,它提供了一種用于開發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?928次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別

    何用java語言開發(fā)一套數(shù)字化產(chǎn)科系統(tǒng)? 數(shù)字化產(chǎn)科管理平臺源碼

    何用java語言開發(fā)一套數(shù)字化產(chǎn)科系統(tǒng) 數(shù)字化產(chǎn)科管理平臺源碼
    的頭像 發(fā)表于 07-06 09:38 ?1072次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>java</b>語言開發(fā)一套數(shù)字化產(chǎn)科系統(tǒng)? 數(shù)字化產(chǎn)科管理平臺源碼

    探討AI編寫代碼技術(shù),以及提高代碼質(zhì)量的關(guān)鍵:靜態(tài)代碼分析工具Perforce Helix QAC &amp; Klocwork

    令軟件開發(fā)人員夜不能寐的事情比比皆是。如今,他們最關(guān)心的問題不再是如何用自己喜歡的語言(C、C++、Erlang、Java 等)表達(dá)最新的算法,而是人工智能(AI)。 本文中,我們將介紹AI編寫代碼
    的頭像 發(fā)表于 06-05 14:10 ?467次閱讀

    何用代碼在運(yùn)行的時(shí)候設(shè)置程序防止被讀出?

    何用代碼在運(yùn)行的時(shí)候設(shè)置程序防止被讀出
    發(fā)表于 06-03 07:24

    怎樣STM32F407的UID碼中提取生產(chǎn)年份和月份信息?

    請問怎樣STM32F407的UID碼中提取生產(chǎn)年份和月份信息?
    發(fā)表于 06-03 06:28

    扎心靈魂小拷問:有了AI編寫代碼之后,軟件工程師會被AI取代嗎?

    軟件開發(fā)者們有很多讓他們焦慮的事情。他們最擔(dān)心的不再是如何用他們最喜歡的編程語言(C、C++、Erlang、Java等)表達(dá)最新的算法。相反,這種擔(dān)憂正逐漸被人工智能(AI)所取代。 在這里,我們將探討AI編寫代碼的過程,并回
    的頭像 發(fā)表于 05-24 19:17 ?841次閱讀
    扎心靈魂小拷問:有了AI編寫<b class='flag-5'>代碼</b>之后,軟件工程師會被AI取代嗎?

    鴻蒙OS開發(fā)實(shí)例:【瀑布流式圖片瀏覽】

    瀑布流式展示圖片文字,在當(dāng)前產(chǎn)品設(shè)計(jì)中已非常常見,本篇將介紹關(guān)于WaterFlow的圖片瀏覽場景,順便集成Video控件,以提高實(shí)踐的趣味性
    的頭像 發(fā)表于 03-29 17:38 ?1276次閱讀
    鴻蒙OS開發(fā)實(shí)例:【瀑布流式<b class='flag-5'>圖片</b>瀏覽】

    MB91530_590 EVB板添加字庫,能顯示圖片但是沒有文字顯示是為什么?

    我的 MB91530_590EVB板在應(yīng)用例程中添加字庫 能顯示圖片但是沒有文字顯示。 我是在開發(fā)板的例程中修改的。 我是按照文檔一步一步做的,為什么顯示不出文字,有知道原因的請盡快回復(fù),不勝感激。 最后顯示的結(jié)果:沒有
    發(fā)表于 02-22 08:19