在我們日常的工作學習中,圖片中的文件識別功能是非常常用的(如用戶上傳的圖片做風控)。我們根據面向的對象不同,一般可以分成兩類:
(1)面向普通用戶;現有的圖片文件識別工具有很多,常見有的微信截圖工具中的自帶的文字識別功能、專業OCR文字識別軟件(如AI識別王、迅捷OCR識別軟件);
(2)面向程序;在編碼的過程中,需要實現自動識別圖片中的文字功能,常見有供應商有阿里的OCR文字識別、百度的OCR文字識別等等,當然也可以自己使用搭建一套圖片文字識別的服務。
下面我們將使用搭建一套自己的圖片文字識別的服務平臺。本平臺中使用的技術有: + + + + 。
是一個開源的光學字符識別(OCR)引擎,是一個基于 OCR引擎的Java接口。
1、-OCR環境搭建
(1)基礎依賴安裝
放在上搭建的,以下是搭建的如下:
#1、基礎依賴
yum -y install gcc-c++ make
yum install -y autoconf automake libtool libjpeg libpng libtiff zlib libjpeg-devel libpng-devel libtiff-devel zlib-devel
#2、下載pkg-config
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.tar.gz
#解壓
tar -zxvf pkg-config-0.29.tar.gz
#編譯
cd pkg-config-0.29/
./configure --with-internal-glib
make
make check
make install
完成基礎依賴安裝后可以看到
(2)上傳的壓縮包和相關的文件
依賴可以到官方網站下載(我這里下載好,直接可以使用,需要的軟件的可以私信我)
上傳文件到上
(3)安裝
#1、解壓文件
tar -zxvf leptonica-1.79.0.tar.gz
#2、編譯
./autogen.sh
./configure --prefix=/usr/local/
make
make install
編譯完成之后的效果:
配置:
vi /etc/profile
-----------------添加配置------------------------
export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/usr/local/lib
export LIBLEPT_HEADERSDIR=/usr/local/include
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
#刷新生效
source /etc/profile
(4)安裝
#1、解壓文件
tar?-zxvf?tesseract-1.1.tar.gz
#2、編譯
./autogen.sh
./configure --with-extra-includes=/usr/local/include --with-extra-libraries=/usr/local/include
make
make?install
編譯之后的效果:
(5)測試安裝是否成功
tesseract --version
安裝成功的效果:
(6)語言庫放到-OCR指定的目錄中
將這兩個文件放在/usr///文件夾下
以上就完成了-OCR基礎環境的搭建。在這個過程中可能出現如下的問題:
configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev package.
問題的原因是沒有安裝pkg-。
2、搭建-OCR平臺服務
(1)搭建基礎的工程(不詳細介紹)
(2)添加依賴
<dependency>
<groupId>net.sourceforge.tess4jgroupId>
<artifactId>tess4jartifactId>
<version>4.5.4version>
dependency>
(3)配置yml文件
server:
port: 8081
#指定識別語言庫的位置
tess4j:
datapath: /usr/local/share/tessdata
(4)配置
@Configuration
public class TesseractOcrConfig {
@Value("${tess4j.datapath}")
private String dataPath;
@Bean
public Tesseract tesseract() {
Tesseract tesseract = new Tesseract();
//設置數據文件夾路徑
tesseract.setDatapath(dataPath);
//設置為中文簡體
tesseract.setLanguage("chi_sim");
return tesseract;
}
}
(5)編寫識別的圖片的服務
@Service
@Slf4j
public class OcrService {
@Resource
private Tesseract tesseract;
public String recognizeText(MultipartFile imageFile) throws IOException, TesseractException {
// 轉換
InputStream sbs = new ByteArrayInputStream(imageFile.getBytes());
BufferedImage bufferedImage = ImageIO.read(sbs);
// 對圖片進行文字識別
return tesseract.doOCR(bufferedImage);
}
}
(6)編寫識別的圖片的服務
@RestController
@RequestMapping("/api")
@Slf4j
@Api(description = "OCR服務")
public class OcrController {
@Resource
private OcrService ocrService;
@PostMapping(value = "/recognize")
public String recognizeImage(@RequestParam("file") MultipartFile file) throws TesseractException, IOException {
// 調用OcrService中的方法進行文字識別
String result = ocrService.recognizeText(file);
log.info("識別圖片的結果:{}", result);
return result;
}
}
(7)本平臺就不寫頁面了,直接使用展示效果,配置
#1、添加依賴
io.springfox ??????
springfox-swagger2 ??????
2.7.0 ???
io.springfox ???????
springfox-swagger-ui ???????
2.7.0
#2、配置swagger
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket webApiConfig(){
System.out.println("啟動swagger");
return new Docket(documentationType.SWAGGER_2)
.groupName("webApi")
.apiInfo(webApiInfo())
.select()
//接口中由/admin /error就不顯示
.paths(Predicates.not(PathSelectors.regex("/admin/.*")))
.paths(Predicates.not(PathSelectors.regex("/error.*")))
//掃描指定的包
????????????????.apis(RequestHandlerSelectors.basePackage("com"))
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("OCR-API文檔") //swagger頁面上大標題
.description("OCR微服務接口定義") //描述
.version("1.0")
.contact(new Contact("java", "http://baidu.com", "1733150517@qq.com"))
.build();
}
}
搭建完成之后的整體項目架構:
3、測試搭建的 OCR平臺
(1)上傳服務的jar包到了上
(2)啟動項目(需要預先安裝jdk和)
java -jar ocr-test-1.0-SNAPSHOT.jar
啟動成功的效果:
(3)啟動(:port/-ui.html)
至此整個平臺就搭建完成。
下面進行圖片測試:
后端打印的日志:
我們的圖片文字識別的平臺就搭建好了。