From d6b74c6807771d04fc906ecf7e128031f634efc5 Mon Sep 17 00:00:00 2001 From: lovelyyoung <1002639516@qq.com> Date: Tue, 23 Jun 2020 17:16:45 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E7=AD=94=E9=A2=98=E5=8D=A1?= =?UTF-8?q?=E9=99=A4=E7=BA=A2=E7=AE=97=E6=B3=95=E5=A4=84=E7=90=86=EF=BC=9B?= =?UTF-8?q?=202.=E8=B0=83=E6=95=B4=E9=94=90=E5=8C=96=E3=80=81=E4=BA=8C?= =?UTF-8?q?=E5=80=BC=E5=8C=96=E3=80=81=E7=AD=94=E9=A2=98=E5=8D=A1=E9=99=A4?= =?UTF-8?q?=E7=BA=A2=E7=9A=84=E7=AE=97=E6=B3=95=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E9=80=82=E9=85=8D=E5=85=A8=E9=80=9A=E3=80=81?= =?UTF-8?q?=E5=A5=BD=E5=88=86=E6=95=B0=E3=80=81=E5=8D=9A=E5=86=A0=EF=BC=9B?= =?UTF-8?q?=203.=E6=B7=BB=E5=8A=A0=E7=AD=94=E9=A2=98=E5=8D=A1=E9=99=A4?= =?UTF-8?q?=E7=BA=A2=E7=9B=B8=E5=85=B3=E5=8F=82=E6=95=B0=E5=8F=98=E9=87=8F?= =?UTF-8?q?=EF=BC=9B=204.=E5=BC=80=E5=90=AF=E7=AD=94=E9=A2=98=E5=8D=A1?= =?UTF-8?q?=E9=99=A4=E7=BA=A2=E9=87=87=E9=9B=86=E5=BD=A9=E8=89=B2=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- huagao/Device/GScanO200.cpp | 51 +++++++++++++++++++++------------ huagao/Device/ImageMatQueue.cpp | 21 ++++++++------ huagao/Device/PublicFunc.h | 3 ++ huagao/Device/scn_config.cpp | 2 +- 4 files changed, 50 insertions(+), 27 deletions(-) diff --git a/huagao/Device/GScanO200.cpp b/huagao/Device/GScanO200.cpp index 63159158..bc8e957e 100644 --- a/huagao/Device/GScanO200.cpp +++ b/huagao/Device/GScanO200.cpp @@ -154,7 +154,9 @@ GScanO200::~GScanO200() devState = DEV_STOP; m_threadUsb->join(); m_threadUsb.reset(); + //writelog("~GScanO200"); } + } void GScanO200::open(int vid, int pid) @@ -187,6 +189,7 @@ int GScanO200::aquire_bmpdata(std::vector& bmpdata) devState = DEV_STOP; m_threadUsb->join(); m_threadUsb.reset(); + //writelog("aquire_bmpdata m_threadUsb.reset();"); } Stop_scan();//停止扫描 ResetScanner(); @@ -204,8 +207,8 @@ int GScanO200::aquire_bmpdata(std::vector& bmpdata) if (m_pImages->valid()) { bmpdata = *(m_pImages->popBmpdata()); //static int aqimgindex = 0; - //FileTools::write_log("1.txt", "aquireed image " + to_string(++aqimgindex)); - //FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "aquired image "+ to_string(++aqimgindex)); + ////FileTools::write_log("1.txt", "aquireed image " + to_string(++aqimgindex)); + //FileTools::write_log("C:\\Users\\huagao\\Desktop\\out.txt", "aquired procced image "+ to_string(++aqimgindex)); #ifdef LOG_NORMAL @@ -242,7 +245,7 @@ std::string GScanO200::GetFWVersion() std::string ver = fwVersion.substr((fwVersion.length() - 2), 2); int verValue = atoi(ver.c_str()); m_bread_fixed_ratio_fromDSP = verValue >= 15; - writelog(m_bread_fixed_ratio_fromDSP ? "can get ratio from dsp" : "can not get dsp ratio"); + //writelog(m_bread_fixed_ratio_fromDSP ? "can get ratio from dsp" : "can not get dsp ratio"); updateHVRatio(); #endif // G200 } @@ -316,18 +319,6 @@ void GScanO200::Scanner_StartScan(UINT16 count) devState = DEV_STOP; m_threadUsb->join(); } -#ifndef G200 - USBCB paperstatus = { GET_PAPER_STATUS ,0,0 }; - m_usb->write_bulk(&paperstatus, sizeof(paperstatus)); - m_usb->read_bulk(&paperstatus, sizeof(paperstatus)); - if (paperstatus.u32_Data == 0) { - m_pImages->setscanflags(false); - devState = DEV_WRONG; - Set_ErrorCode(NO_FEED); - return; - } -#endif // !G200 - USBCB status = { GET_DSP_STATUS ,0,0 }; m_usb->write_bulk(&status, sizeof(status)); @@ -353,6 +344,18 @@ void GScanO200::Scanner_StartScan(UINT16 count) break; } +#ifndef G200 + USBCB paperstatus = { GET_PAPER_STATUS ,0,0 }; + m_usb->write_bulk(&paperstatus, sizeof(paperstatus)); + m_usb->read_bulk(&paperstatus, sizeof(paperstatus)); + if (paperstatus.u32_Data == 0) { + m_pImages->setscanflags(false); + devState = DEV_WRONG; + Set_ErrorCode(NO_FEED); + return; + } +#endif // !G200 + if (gcap.is_duplex) count = count == 65535 ? 65535 : count / 2; USBCB usbcb = { START_COMMAND,(UINT32)count ,0 }; @@ -362,6 +365,11 @@ void GScanO200::Scanner_StartScan(UINT16 count) m_threadUsb.reset(new std::thread(&GScanO200::usbmain, this)); m_pImages->run(); } + else + { + devState = DEV_WRONG; + Set_ErrorCode(USB_DISCONNECTED); + } } void GScanO200::Stop_scan() @@ -447,9 +455,9 @@ void GScanO200::usbhotplug_callback(bool isconnect, void* userdata) void GScanO200::usbhotplug(bool isleft) { if (isleft) { - devState = DEV_WRONG; - Error_Code = USB_DISCONNECTED; - m_pImages->setscanflags(false); + devState = DEV_WRONG; + Error_Code = USB_DISCONNECTED; + m_pImages->setscanflags(false); } } @@ -499,8 +507,12 @@ void GScanO200::usbmain() imgData = Get_Img_Data(totalNum); if (!imgData->size()) { Stop_scan(); + writelog("imgData->size() error"); + break; } m_pImages->pushMat(std::shared_ptr(new G200Decode(imgData))); + /*static int rawdataindex = 0; + FileTools::write_log("C:\\Users\\huagao\\Desktop\\out.txt", "origin rawbuffer index " + std::to_string(++rawdataindex));*/ #ifdef LOG_NORMAL static int rawdataindex = 0; FileTools::write_log("out.txt", "Enquque rawbuffer index " + std::to_string(++rawdataindex)); @@ -561,6 +573,9 @@ USBCB GScanO200::Get_Scanner_Status() std::shared_ptr> GScanO200::Get_Img_Data(int bufferSize) { + if (m_usb.get() && !m_usb->is_connected()) + return std::shared_ptr>(new std::vector()); + std::shared_ptr> imData(new std::vector(bufferSize)); StopWatch sw; int readed = 0; diff --git a/huagao/Device/ImageMatQueue.cpp b/huagao/Device/ImageMatQueue.cpp index a2b3dcc8..92967c5e 100644 --- a/huagao/Device/ImageMatQueue.cpp +++ b/huagao/Device/ImageMatQueue.cpp @@ -123,8 +123,8 @@ void ImageMatQueue::clear() void ImageMatQueue::setparam(const GScanCap& param) { scanParam = param; - scanParam.is_duplex = 0; - scanParam.imageRotateDegree = 90.0f; + //scanParam.is_duplex = 0; + //scanParam.imageRotateDegree = 90.0f; #ifdef DEBUG string outinfo = "autodescrew : " + to_string(scanParam.autodescrew) + "\n brightness : " + to_string(scanParam.brightness) + "\n contrast " + to_string(scanParam.contrast) + "\n enhance_color : " + to_string(scanParam.enhance_color) + "\n en_fold: " + to_string(scanParam.en_fold) + "\n fillbackground : " + to_string(scanParam.fillbackground) + "\n is_fillhole : " + to_string(scanParam.fillhole.is_fillhole) + "\n fillholeratio : " + to_string(scanParam.fillhole.fillholeratio) + "\n filter : " + to_string(scanParam.filter) + "\n gamma : " + to_string(scanParam.gamma) @@ -174,15 +174,19 @@ void ImageMatQueue::setparam(const GScanCap& param) int contrast = (int)(param.contrast * 0.036);//[-36,36] 0.036=72.0/2000.0; m_iaList.push_back(shared_ptr(new CImageApplyAdjustColors(bright, contrast, param.gamma))); } - - if (param.pixtype == 0) //threshold - m_iaList.push_back(shared_ptr(new CImageApplyBWBinaray(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY))); - + //答题卡除红 + if (scanParam.hsvcorrect) + { + m_iaList.push_back(shared_ptr(new CImageApplyHSVCorrect(CImageApplyHSVCorrect::CorrectOption::Red_Removal))); + } + //锐化 if (param.sharpen) { SharpenBlur sb = (SharpenBlur)param.sharpen; m_iaList.push_back(shared_ptr(new CImageApplySharpen(sb))); } - + //二值化 + if (param.pixtype == 0) //threshold + m_iaList.push_back(shared_ptr(new CImageApplyBWBinaray(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY))); if (param.resolution_dst != param.resolution_native) { @@ -200,6 +204,7 @@ void ImageMatQueue::setparam(const GScanCap& param) } m_iaList.push_back(shared_ptr< CImageApply>(apply)); } + if (scanParam.en_fold) { @@ -271,7 +276,7 @@ void ImageMatQueue::proc() for (auto& buf : buffs) { ImreadModes rm; - if (scanParam.filter != 3 || scanParam.enhance_color) + if (scanParam.filter != 3 || scanParam.enhance_color || scanParam.hsvcorrect) rm = IMREAD_COLOR; else rm = scanParam.pixtype == 2 ? IMREAD_COLOR : IMREAD_GRAYSCALE; diff --git a/huagao/Device/PublicFunc.h b/huagao/Device/PublicFunc.h index fd3e8920..dc607c08 100644 --- a/huagao/Device/PublicFunc.h +++ b/huagao/Device/PublicFunc.h @@ -50,6 +50,7 @@ using namespace std; #define MULTIOUTPUT "iMultiOutPut" #define OUTHOLE "bOutHole" #define OUTHOLERATIO "iOutHoleRatio" +#define HSVCORRECT "bHsvCorrect" //