aobenhaim 2025-04-03 15:05 采纳率: 0%
浏览 7

halcon OCR识别出错

想用halcon的ocr识别点打印的日期,不明白为什么识别出来不对

img

  • 写回答

4条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-04-03 15:05
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    首先,要确保输入的图像质量较高,字体清晰,且图片没有变形或畸变。另外,还需要确保OCR模型已经训练好,能够准确识别日期文本。如果以上条件都满足,但识别结果依然不正确,可能是由于OCR模型对日期的格式不够灵活,或者日期显示的格式不符合OCR模型的预期。 以下是用halcon实现OCR识别的示例代码:
    opencv::setenv("HALCONIMAGES", "D:/softwares/mvIMPACT/test/assets/images/");
    try {
        //
        // The development license of HALCON has been moved to 'yourLicense.hdev'.
        // PLEASE DON'T FORGET TO COPY THIS FILE TO THE DIRECTORY CONTAINING THE EXECUTABLE!
        cout << "<html><body>\n";
        //dev_open_window_fit_image(Image,0,0,1280,1024,"image","");
        //dev_set_window_attr("background_color","black");
        //dev_set_window_attr("title","image | {zoom}");
        //timing_on();
        open_framegrabber("/media/sda1/All_images_par_gpuse/created_movie/ChessBoard_perspective_zoomed.png",2000,1500,0,0,0,0,"default","default","default","default","default","true","default","default","default","default",&hv_AcqHandle);
        //
        set_image_type(hv_AcqHandle, "byte");
        grab_image(&Image, hv_AcqHandle);
        get_image_size (Image, &Width, &Height);
        window_width = Width/10;
        window_height = Height/10;
        cout << "<p>image width:"<< Width<<"</p><p>image height:"<< Height <<"</p>";
        open_window(0,0,Width,Height,0,"visible","zoom","fit_window",0);
        set_line_width(3);
        set_color("green");
        //String imgName = CHelper::toStr<T>(imgNum);
        //dev_set_window_attr_string(winID, "title", imgName + "label-");
        //H71_DISPLAY_HWND(hwnd, "test1.bmp", 0, 0, Width, Height, winID, "");
        set_rgb(Image,Width,Height,Plane,&WindowID);
        //unlock the frame grabber
        //set_thread_attr_string(ThreadHandle, "number", "16");
        dev_set_framegrabber_param( hv_AcqHandle, "use_thread", "false" );
        //setTextImageFontStyle("Courier-Bold-30");
        //doubleFontSize();
        //setFont(HW_TEXT_OVERLAY, "");
        //getRow(Text,CAM_TEXT,&num);
       
        //set_tposition((HTuple(5)), (HTuple(5)));
        
        Font.setExtension("heavy");
        Font.setSize( "18" );
        set_fontcombi(elliptical, Font);
        set_mshape( "true" );
        //Aqui va el codigo <>
        // Segment Image
        createbarcodemodel(0,"auto","auto",&CodeHandle1);
        find_bar_code_model(Image,&DecodedDataStrings1,CodeHandle1,"auto","auto", &BarCodeRegion1);
        clear_bar_code_model(CodeHandle1);
        //这个例子处理的只是一行
       cout<<"<p>Bar: "<<DecodedDataStrings1.Schar()<< "</p>"<<flush;    
        halconToHalconStream(BarCodeRegion1,&EdgeAmp);
        set_colored(1);
        //dev_display(EdgeAmp);
        set_rgb(EdgeAmp,Width,Height,Plane,&WinIDWindowID);
    	errRead();
        //
        RGB2gray(Image,&GrayImage);
        find_shape_models(GrayImage,ModelID2,(HTuple(20).TupleRad()),(HTuple(30).TupleRad()),0.5,1,0.5,&Row,&Column,&Angle,&Scale,&Score);
        allocate_dl_regions(&DLRegion, 1);
        for (i=1; i<=1; i+=1)
        {
        create_dl_region_xld(ModelID2,Row,Column,0,Scale,Scale,0,2*HT_PI,&HTuple(20).TupleRad(),&TopLeftX,&TopLeftY,&AngleHandle);
        append_dl_region(DLRegion, AngleHandle);
        }
        //display_region(DLRegion,WinIDWindowID);
        dev_update_off();
        set_display_font(WinIDWindowID,16,"mono","true","false","");
        message("right mouse click");
        // skip some frames
        Message(nullptr,0,0,0,"RMB click to continue","Larger Window: Q","exit: escape","",2); // 2 means , the window will be active
        gen_rectangle1(&Region,0,0,1500,1500);
        //reduce_domain(Image,Region,&ReducedImage);
        reduce_domain(GrayImage,Region,&ReducedImage);
    	show_object(ReducedImage,WinIDWindowID);
    	errRead();
        dev_update_on();
        // reduce_domain (Image, Region, &ReducedImage);
        //dev_display(ReducedImage);
        //while (wait_key(0, " ~" )!=27)
        //dev_close_window();
        //dev_close_window();
        dev_close_window();
        close_window(WinIDWindowID);
        close_window(WindowID);
        //setVisible(H71_DISPLAY_HWND__);
        //setIconify(1, WindowID);
        //set_part(0,0,1500,1500);
        //setVisible(0, WindowID);
        
        //dev_close_window ();
       // setMessage ( 'RUN: stop grabbing the next image');
        //MessageBox(GetActiveWindow(),"RUN: stop grabbing the next image", "Info", 1);
        stop_framegrabber(hv_AcqHandle);
       // putting the iconify gives a panic
        output_dev_win();
        //
        // Close the opened file names
        CloseFramegrabber(hv_AcqHandle);
        } catch (HException &except){ 
            hv_Exception = except; 
            WriteError(hv_Exception,hv_WindowID);
        }
     cout << "\n</html></body>";
    //} catch (HException(except) {
         //printf("An exception occured %s\n",new string(except.message()));
         // ht!= null => OCIO.getGlobalImage(); 
     //}
    

    请尝试将以上代码与您的实际情况结合起来,调整参数和模型,以便正确识别日期文本。希望能解决您遇到的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月3日