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:

https://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

Your email address will not be published.


*