OCR z użyciem Spring Boota i zależności net.sourceforge.tess4j
OCR z użyciem Spring Boota i zależności net.sourceforge.tess4j
OCR (z ang. Optical Character Recognition) to mechanizm który pozwala na rozpoznawanie tekstu z pliku graficznego. W tym wpisie z użyciem Spring Boota i biblioteki net.sourceforge.tess4j rozpoznamy tekst z kilku plików graficznych zawartych na stronie JavaLeader.pl. Ponadto użyjemy biblioteki Swagger do wykonywania zapytań RESTowych. Biblioteka ta opisana jest tutaj: https://javaleader.pl/2019/06/18/swagger-ui-prosty-sposob-na-wizualizacje-api/. Zaczynamy od utworzenia nowego projektu Spring Boota i dodania zależności do pliku pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>4.3.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency> </dependencies>
Klasa konfiguracyjna dla oprogramowania Swagger:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } }
Tworzymy model z użyciem biblioteki Lombok dla przejrzystości kodu:
@Getter @Setter public class ImageModel { private String url; private String content; }
Tworzymy klasę pomocniczą OcrHelper:
@Component public class OcrHelper { public String createOCR(String url, ResourceLoader resourceLoader) { try { URL imageFile = new URL(url); BufferedImage bufferedImage = ImageIO.read(imageFile); ITesseract instance = new Tesseract(); File tessDataFolder = LoadLibs.extractTessResources("tessdata"); System.out.println(tessDataFolder.getAbsolutePath()); instance.setDatapath(tessDataFolder.getAbsolutePath()); instance.setLanguage("pol"); return instance.doOCR(bufferedImage); } catch (Exception e) { e.printStackTrace(); } return ""; } }
Powyższa klasa rozpakuje pliki językowe do katalogu:
C:\Users\mwarycha\AppData\Local\Temp\tess4j\tessdata
jeśli zależy nam na pliku językowym którego nie ma w rozpakowanym katalogu to należy go pobrać ze strony:
http://github.com/tesseract-ocr/tesseract/wiki/Data-Files
i zamieścić w katalogu plików językowych:
C:\Users\mwarycha\AppData\Local\Temp\tess4j\tessdata
Testujemy aplikację:
Przechodzimy pod adres:
http://localhost:8081/swagger-ui.html
i metodą POST przesyłamy żądanie:
W wyniku otrzymujemy prawidłowo rozszyfrowany z przekazanej grafiki tekst:
Przetestujmy działanie aplikacji dla innej grafiki:
{ "content":"string", "url": "https://javaleader.pl/wp-content/uploads/2019/07/Testy-wydajno%C5%9Bciowe-z-Apache-Benchmark-310x174.png" }
Wynik dalej prawidłowy:
Leave a comment