1.话不多说效果如下
OCR识别
代码demo
go
func testCarClassifier() {
dll, _ := syscall.LoadDLL("ppocr.dll")
detect, _ := dll.FindProc("ImageProcess")
path := "E:\\im\\car\\data\\voc\\VOCdevkit\\VOC2019\\Test"
files, err := ioutil.ReadDir(path)
if nil != err {
fmt.Println("次目录不是个文件夹")
return
}
pathSep := string(os.PathSeparator)
var carPathFile []string
for _, fil := range files {
p := path + pathSep + fil.Name()
fmt.Println(p)
if !fil.IsDir() {
temp := gocv.IMRead(p, gocv.IMReadColor)
if !temp.Empty() {
carPathFile = append(carPathFile, p)
}
}
}
fmt.Println("当前需要处理图片总数:%d", len(carPathFile))
//newCarPath := [1]string{path + pathSep + "A5JU93.jpg"}
for index, carPath := range carPathFile {
fmt.Println(carPath)
tempCar := gocv.IMRead(carPath, gocv.IMReadColor)
defer tempCar.Close()
tempCarGrag := gocv.NewMat()
defer tempCarGrag.Close()
gocv.CvtColor(tempCar, &tempCarGrag, gocv.ColorBGRToGray)
// windowA := gocv.NewWindow("watch")
// defer windowA.Close()1
// load classifier to recognize faces
classifier := gocv.NewCascadeClassifier()
defer classifier.Close()
classifier.Load("D:\\go_work\\opencv-4.7.0\\data\\haarcascades\\haarcascade_russian_plate_number.xml")
rects := classifier.DetectMultiScale(tempCarGrag)
fmt.Println("rects:%d", len(rects))
for i := 0; i < len(rects); i++ {
reactImg := tempCar.Region(rects[i])
newPat := path + pathSep + strconv.Itoa(index) + "_" + strconv.Itoa(i) + ".jpg"
fmt.Println("==%s", newPat)
gocv.IMWrite(newPat, reactImg)
bT := time.Now() // 开始时间
res, _, _ := detect.Call(strPtr(newPat))
p_result := (*C.char)(unsafe.Pointer(res))
ocrresult := C.GoString(p_result)
eT := time.Since(bT) // 从开始到当前所消耗的时间
fmt.Println("Run time: ", eT)
fmt.Println(ocrresult)
}
}
}