Cara Pengakuan Bekerja
Cara Kerja Pengenalan
Halaman ini menjelaskan apa yang sebenarnya dilakukan AsposeOcr.Recognize() secara internal, mulai dari validasi input hingga RecognitionResult akhir. Memanggil AsposeOcr.Recognize(OcrInput) menjalankan pipeline tetap dengan delapan langkah. Setiap langkah di bawah ini didasarkan pada implementasi library itu sendiri — tidak ada tahapan yang dapat dikonfigurasi.
1. Validasi Input
Sebagai langkah pertama sebelum model dimuat, Recognize() memvalidasi OcrInput: ia menolak input null (ArgumentNullException), InputType yang tidak didukung (NotSupportedException), dan jalur antrian mana pun yang tidak ada di disk (FileNotFoundException). Tidak ada sesi ONNX yang dibuat sampai semua input lolos.
2. Rendering PDF atau Memuat Raster
Untuk InputType.PDF, setiap halaman dirender menjadi gambar RGB 24-bit pada 150 DPI using Aspose.PDF.FOSS. Untuk InputType.SingleImage, berkas raster dimuat secara langsung. Resolusi render 150 DPI bersifat tetap dan tidak dapat dikonfigurasi.
3. Preprocessing Detektor
Gambar dikonversi ke skala abu-abu menggunakan bobot luma Rec. 709, yang mempertahankan kecerahan yang dipersepsikan lebih akurat dibandingkan rata-rata saluran sederhana. Jika sisi terpanjang gambar melebihi 1000 piksel, gambar diperkecil dengan sebuah separable Lanczos-8 filter (dua lintasan satu-dimensi) untuk menyesuaikan pra-pemrosesan model detektor pada saat pelatihan. Sebuah strip putih 32 piksel ditambahkan di bagian bawah gambar untuk alasan yang sama.
4. Deteksi Wilayah
Gambar yang telah dipra-proses diteruskan melalui model ONNX terbenam pertama, yang menghasilkan peta probabilitas teks dan fitur visual menengah. Model ONNX kedua — model penyempurnaan — memperkuat hubungan antar karakter berdekatan sehingga satu baris teks lengkap terdeteksi sebagai satu wilayah, bukan beberapa fragmen. Kedua model dijalankan pada CPU dengan Microsoft.ML.OnnxRuntime dikonfigurasi untuk 8 thread pekerja intra-operasi.
5. Pemrosesan Pasca Wilayah
Peta probabilitas teks dan tautan detektor di-threshold, lalu dikelompokkan dengan flood fill lebar-pertama empat-koneksi. Setiap wilayah yang dihasilkan diperluas, dipasangkan dengan persegi panjang area minimum, diskalakan kembali ke koordinat gambar sumber, dan disederhanakan menjadi persegi panjang garis yang tidak bersarang dan sejajar sumbu. Persegi panjang inilah yang pada akhirnya dikembalikan oleh RecognitionResult.LinesResult.Line.
6. Pengenalan Baris
Setiap persegi panjang yang terdeteksi dipadatkan dengan dua piksel, dipotong dari gambar sumber, dan diubah ukurannya — mempertahankan rasio aspeknya — ke sebuah ukuran tetap 1200×32 kanvas putih. Hasilnya dikonversi menjadi tensor grayscale NHWC dan diteruskan ke model pengenalan.
7. Dekoding CTC
Output mentah model pengenalan didekode dengan metode greedy CTC (Klasifikasi Temporal Koneksionis) dekoding: kelas yang diprediksi berulang digabungkan, kelas kosong dihapus, dan kelas yang tersisa dipetakan melalui alfabet Latin yang tertanam dalam model untuk menghasilkan teks yang dikenali pada baris tersebut.
8. Penyusunan Hasil
Baris yang dikenali dipasangkan dengan persegi panjang gambar sumber mereka untuk membangun setiap RecognitionResult.LinesResult. Semua baris yang tidak kosong digabungkan dengan jeda baris platform untuk menghasilkan RecognitionResult.RecognitionText.
Pekerjaan Secara Berurutan vs. Paralel
Berkas masukan dan, untuk PDF, halaman individual diproses sequentially — tidak ada multithreading tingkat input API. Paralelisme hanya ada di dalam setiap panggilan inferensi ONNX, di mana Microsoft.ML.OnnxRuntime memparallelkan eksekusi graf di seluruh 8 thread intra-operasi yang dikonfigurasikan.