import static org. bytedeco . javacpp . opencv_imgproc .*;
import static org. bytedeco . javacpp . opencv_highgui .*;
import static org. bytedeco . javacpp . opencv_core .*;
import static org. bytedeco . javacpp . opencv_video .*;
import java.awt.image.BufferedImage ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.Comparator ;
import javax.swing.JFrame ;
import javax.swing.JOptionPane ;
import net.sourceforge.tess4j.ITessAPI ;
import net.sourceforge.tess4j.Tesseract1 ;
import net.sourceforge.tess4j.TesseractException ;
import org.bytedeco.javacpp.Loader ;
import org.bytedeco.javacpp.opencv_core ;
import org.bytedeco.javacpp.opencv_core.CvMemStorage ;
import org.bytedeco.javacpp.opencv_core.CvRect ;
import org.bytedeco.javacpp.opencv_core.CvScalar ;
import org.bytedeco.javacpp.opencv_core.CvSeq ;
import org.bytedeco.javacpp.opencv_core.IplConvKernel ;
import org.bytedeco.javacpp.opencv_core.IplImage ;
import org.bytedeco.javacpp.opencv_highgui ;
import org.bytedeco.javacv.CanvasFrame ;
import org.bytedeco.javacv.Frame ;
public class plakaOcr {
String yeni= "" , Result= "" , PlakaMetin= "" , ters= "" ;
IplImage griPlaka, roiCikis, gray_roi, HarfroiCikis, Harfgray_roi, PlakaAlani;
public String getYeni () {
return yeni;
}
public void setYeni ( String yeni) {
this . yeni = yeni;
}
public String getTers () {
return ters;
}
public void setTers ( String ters) {
this . ters = ters;
}
public plakaOcr () throws InterruptedException{
CanvasFrame plakaFrame = new CanvasFrame( "İlk plaka" );
CanvasFrame Keranarı Temiz = new CanvasFrame( "Kernarı Temiz plaka" );
CanvasFrame OCRAlani = new CanvasFrame( "OCR alanı plaka" );
CanvasFrame bulunanAlan = new CanvasFrame( "Bulunan Char plaka" );
CanvasFrame filter = new CanvasFrame( "Filter plaka" );
int kernelSize = 3 ;
int KernelAnchorOffset= 1 ;
IplConvKernel morfo2= cvCreateStructuringElementEx( kernelSize, kernelSize, KernelAnchorOffset, KernelAnchorOffset, CV_SHAPE_RECT);
IplConvKernel morfo = IplConvKernel. create ( 3 , 3 , 1 , 1 , CV_SHAPE_RECT, null );
IplImage plaka = cvLoadImage( "plaka.jpg" );
plakaFrame. setDefaultCloseOperation ( JFrame. EXIT_ON_CLOSE );
plakaFrame. showImage ( plaka);
PlakaAlani = IplImage. create ( 300 , 70 , plaka. depth (), plaka. nChannels ());
griPlaka = IplImage. create ( PlakaAlani. width (), PlakaAlani. height (), IPL_DEPTH_8U, 1 );
cvResize( plaka, PlakaAlani);
cvCvtColor( PlakaAlani, griPlaka, CV_BGR2GRAY);
cvAdaptiveThreshold( griPlaka, griPlaka, 255 , CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 15 , 5 );
cvSmooth( griPlaka, griPlaka, CV_MEDIAN, 7 , 7 , 1 , 1 );
cvMorphologyEx( griPlaka, griPlaka, null , morfo, CV_MOP_OPEN, 1 );
cvSmooth( griPlaka, griPlaka, CV_MEDIAN, 5 , 5 , 1 , 1 );
cvEqualizeHist( griPlaka, griPlaka);
filter. showImage ( griPlaka);
CvMemStorage mem = opencv_core. CvMemStorage . create ();
CvSeq contours = new opencv_core. CvSeq ();
CvSeq ptr = new opencv_core. CvSeq ();
cvFindContours( griPlaka, mem, contours,
Loader. sizeof ( opencv_core. CvContour . class ), CV_RETR_EXTERNAL,
CV_CHAIN_APPROX_SIMPLE, cvPoint( 0 , 0 ));
CvRect boundbox = null ;
int i = 0 ;
ArrayList< CvRect> HarfAlani = new ArrayList< CvRect>();
ArrayList< CvRect> YaziAlani = new ArrayList< CvRect>();
for ( ptr = contours; ptr != null ; ptr = ptr. h_next ()) {
boundbox = cvBoundingRect( ptr, 0 );
if ( boundbox. width () * boundbox. height () > 5000 && boundbox. width () * boundbox. height () < 20000 ) {
YaziAlani. add ( i, boundbox);
i= i+ 1 ;
}
}
opencv_core. cvClearMemStorage ( mem);
contours = null ;
ptr = null ;
CvMemStorage Harfmem = opencv_core. CvMemStorage . create ();
CvSeq Harfcontours = new opencv_core. CvSeq ();
CvSeq Harfptr = new opencv_core. CvSeq ();
try {
opencv_core. cvSetImageROI ( PlakaAlani, cvRect( YaziAlani. get ( 0 ). x (), YaziAlani. get ( 0 ). y (),
YaziAlani. get ( 0 ). width (),
YaziAlani. get ( 0 ). height ()));
roiCikis = IplImage. create ( cvGetSize( PlakaAlani), PlakaAlani. depth (), PlakaAlani. nChannels ());
cvCopy( PlakaAlani, roiCikis);
cvResetImageROI( PlakaAlani);
gray_roi = IplImage. create ( roiCikis. width (), roiCikis. height (), IPL_DEPTH_8U, 1 );
cvCvtColor( roiCikis, gray_roi, CV_BGR2GRAY);
cvAdaptiveThreshold( gray_roi, gray_roi, 255 , CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 15 , 5 );
cvSmooth( gray_roi, gray_roi, CV_MEDIAN, 7 , 7 , 1 , 1 );
cvMorphologyEx( gray_roi, gray_roi, null , morfo2, CV_MOP_OPEN, 1 );
cvSmooth( gray_roi, gray_roi, CV_MEDIAN, 5 , 5 , 1 , 1 );
cvEqualizeHist( gray_roi, gray_roi);
cvCanny( gray_roi, gray_roi, 200 , 200 );
Keranarı Temiz. showImage ( gray_roi);
cvFindContours( gray_roi, Harfmem, Harfcontours,
Loader. sizeof ( opencv_core. CvContour . class ), CV_RETR_TREE,
CV_CHAIN_APPROX_SIMPLE, cvPoint( 0 , 0 ));
CvRect Harfboundbox = null ;
int j = 0 ;
for ( Harfptr = Harfcontours; Harfptr != null ; Harfptr = Harfptr. h_next ()) {
Harfboundbox = cvBoundingRect( Harfptr, 0 );
if (( Harfboundbox. height () > 20 )&&( Harfboundbox. width ()> 12 ) && Harfboundbox. width () * Harfboundbox. height () < 3000 ){
HarfAlani. add ( j, Harfboundbox);
j= j+ 1 ;
cvRectangle(
PlakaAlani,
cvPoint( Harfboundbox. x (), Harfboundbox. y ()),
cvPoint( Harfboundbox. x () + Harfboundbox. width (),
Harfboundbox. y () + Harfboundbox. height ()),
cvScalar( 225 , 0 , 0 , 0 ), 2 , 8 , 0 );
}
}
bulunanAlan. showImage ( PlakaAlani);
int height = 0 ;
for ( int h= 0 ; h< HarfAlani. size (); h++){
height += HarfAlani. get ( h). height ();
}
if ( HarfAlani. size ()> 0 ){
int ortalama = height/ HarfAlani. size ();
for ( int h= 0 ; h< HarfAlani. size (); h++){
if ( HarfAlani. get ( h). height ()< ortalama- 1 ){
HarfAlani. remove ( h);
}
}
}
opencv_core. cvResetImageROI ( gray_roi);
opencv_core. cvResetImageROI ( PlakaAlani);
Collections. sort ( HarfAlani, Main. Sirala );
OCRAlani. showImage ( roiCikis);
for ( int h= 0 ; h< HarfAlani. size (); h++){
opencv_core. cvSetImageROI ( roiCikis, cvRect( HarfAlani. get ( h). x ()- 3 , HarfAlani. get ( h). y ()- 3 ,
HarfAlani. get ( h). width ()+ 3 ,
HarfAlani. get ( h). height ()+ 6 ));
HarfroiCikis = IplImage. create ( cvGetSize( roiCikis), roiCikis. depth (), roiCikis. nChannels ());
cvCopy( roiCikis, HarfroiCikis);
cvResetImageROI( roiCikis);
Harfgray_roi = IplImage. create ( HarfroiCikis. width (), HarfroiCikis. height (), IPL_DEPTH_8U, 1 );
cvCvtColor( HarfroiCikis, Harfgray_roi, CV_BGR2GRAY);
cvAdaptiveThreshold( Harfgray_roi, Harfgray_roi, 255 , CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 15 , 5 );
cvSmooth( gray_roi, gray_roi, CV_MEDIAN, 7 , 7 , 3 , 3 );
int zero = cvCountNonZero( Harfgray_roi);
//System.out.println(zero);
if ( zero< 600 ){
cvDilate( Harfgray_roi, Harfgray_roi, morfo2, 1 );
// cvThreshold(Harfgray_roi, Harfgray_roi, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
cvErode( Harfgray_roi, Harfgray_roi, morfo2, 1 );
//System.out.println("Girdi..");
}
cvMorphologyEx( Harfgray_roi, Harfgray_roi, null , morfo2, CV_MOP_CLOSE, 1 );
cvSaveImage( "harfler/" + h+ "_harf.jpg" , Harfgray_roi);
// System.setProperty("jna.library.path","c:/javacv-bin/Tess4J/");
Tesseract1 instance = new Tesseract1();
instance. setLanguage ( "leu" );
instance. setPageSegMode ( ITessAPI. TessPageSegMode . PSM_SINGLE_CHAR );
BufferedImage harfGrayBufferedImage = Harfgray_roi. getBufferedImage ();
try {
Result = instance. doOCR ( harfGrayBufferedImage);
PlakaMetin += Result;
//System.out.println("Bulunan Textler: " + Result);
} catch ( TesseractException e) {
System. err . println ( "Tesseract hatasi alindi." + e. getMessage ());
}
}
} catch ( Exception e){
System. out . println ( e);
}
try {
yeni = PlakaMetin. replaceAll ( "\n" , "" );
} catch ( Exception e){
System. out . println ( "yazacak bir şey bulunamadı..." );
yeni= "" ;
}
PlakaMetin= "" ;
opencv_core. cvClearMemStorage ( Harfmem);
Harfcontours = null ;
Harfptr = null ;
System. out . println ( yeni);
//JOptionPane.showMessageDialog(null, yeni);
}
public static Comparator< CvRect> Sirala = new Comparator< CvRect>() {
public int compare ( CvRect a, CvRect b){
int satirNo1 = a. x ();
int satirNo2 = b. x ();
return satirNo1 - satirNo2; //A'dan z ye
}};
public static void main ( String args[]) throws InterruptedException{
new plakaOcr ();
}
}
VIDEO
Hello, I want download project, you can send to mail alovndev@gmail.com
YanıtlaSilI run error
run:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1191)
at org.bytedeco.javacpp.Loader.load(Loader.java:953)
at org.bytedeco.javacpp.Loader.load(Loader.java:854)
at org.bytedeco.javacpp.opencv_core.(opencv_core.java:10)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.bytedeco.javacpp.Loader.load(Loader.java:913)
at org.bytedeco.javacpp.Loader.load(Loader.java:854)
at org.bytedeco.javacpp.opencv_imgproc.(opencv_imgproc.java:12)
at com.teamvietdev.view.Exam.(Exam.java:68)
at com.teamvietdev.view.Exam.main(Exam.java:234)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_core249 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1191)
at org.bytedeco.javacpp.Loader.load(Loader.java:940)
... 9 more