diff --git a/capimage/MultiFrameCapture.cpp b/capimage/MultiFrameCapture.cpp index e1f4912..dd9ee3e 100644 --- a/capimage/MultiFrameCapture.cpp +++ b/capimage/MultiFrameCapture.cpp @@ -180,7 +180,7 @@ void MultiFrameCapture::open(HGScanConfig config, FPGAConfigParam_8478 fpgaparam // fpgaComm->write(12,0x04e20400); //0x494e491 0x79de496 范围 0-12 16-28 (16-28 > 0-12) fpgaComm->read(10, reg10); - fpgaComm->write(12, 0x00200010); // 58us 300*600 多帧 + fpgaComm->write(12, 0x00f000e0); // 58us 300*600 多帧 fpgaComm->write(10, 0x0150012a); // 58us 300*600 多帧 @@ -672,7 +672,7 @@ void MultiFrameCapture::openDevice(int dpi, int mode) // } // else { - fpgaComm->write(12, 0x00200010); // 58us 300*600 多帧 + fpgaComm->write(12, 0x00f000e0); // 58us 300*600 多帧 fpgaComm->write(10, 0x0150012a); // 58us 300*600 多帧 } configFPGAParam(mode, dpi); @@ -1436,7 +1436,7 @@ void MultiFrameCapture::set_pixel_count_8478(int val, bool is_gray) { val = val - 10; - //fpgaComm->write(20, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); + fpgaComm->write(21, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); fpgaComm->write(19, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); write_adc_8478(bank_change[1], 1, (val & 0x7f00) / 0x100, (val & 0x7f00) / 0x100); // count0 -A diff --git a/capimage/MultiFrameCapture_8478_HL.cpp b/capimage/MultiFrameCapture_8478_HL.cpp index 0d21643..39d929f 100644 --- a/capimage/MultiFrameCapture_8478_HL.cpp +++ b/capimage/MultiFrameCapture_8478_HL.cpp @@ -1383,7 +1383,7 @@ void MultiFrameCapture_8478_HL::set_pixel_count_8478(int val, bool is_gray) { val = val - 10; - //fpgaComm->write(20, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); + fpgaComm->write(21, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); fpgaComm->write(19, ((val & 0xffff) * 0x10000) * 3 + (val & 0xffff) * 3); write_adc_8478(bank_change[1], 1, (val & 0x7f00) / 0x100, true); // count0 -A diff --git a/imgproc/imageencode.cpp b/imgproc/imageencode.cpp index 7767192..6d0ef23 100644 --- a/imgproc/imageencode.cpp +++ b/imgproc/imageencode.cpp @@ -39,7 +39,7 @@ MemoryPtr JpegImageEncode::encode(cv::Mat &image) VectorMemroyPtr mem = VectorMemroyPtr(new VectorMemroy()); // StopWatch sw; cv::imencode(m_bwimg ? ".png" : ".jpg", image, mem->buf(), compression_params); - // printf("encode time = %0.2f \n", sw.elapsed_ms()); + // printf("!!!!!!!!!!encode time = %0.2f \n", sw.elapsed_ms()); return mem; } diff --git a/packages/common.pkg/include/commondef.h b/packages/common.pkg/include/commondef.h index 3e888ca..889cf5a 100644 --- a/packages/common.pkg/include/commondef.h +++ b/packages/common.pkg/include/commondef.h @@ -8,10 +8,10 @@ #define G200 #ifdef G200 -#define FWVersion "G2393D0228" +#define FWVersion "G2393D0311" #define SERIALNUM "G2396021071101" #else -#define FWVersion "G1393D0228" +#define FWVersion "G1393D0311" #define SERIALNUM "G1396021071101" #endif diff --git a/scanner/imageusbhandler.cpp b/scanner/imageusbhandler.cpp index 894417c..41a4e0f 100644 --- a/scanner/imageusbhandler.cpp +++ b/scanner/imageusbhandler.cpp @@ -27,6 +27,7 @@ public: cv::Mat HG_RGA_Resize(cv::Mat& srcMat, cv::Size dsize, double fx = 0, double fy = 0, int interpolation = cv::INTER_LINEAR) { + if(srcMat.channels() == 3) { int ret = 0; @@ -87,6 +88,25 @@ public: cv::resize(srcMat,srcMat,dsize,fx,fy,interpolation); return srcMat; } + // int rows = srcMat.rows / 2; + // cv::Mat dst(rows, srcMat.cols, srcMat.type()); + // int step = srcMat.step; + // uchar* ptr1 = srcMat.data; + // uchar* ptr2 = srcMat.data + step; + // uchar* ptr = dst.data; + // ushort pix; + // for (size_t i = 0; i < rows; i++) + // { + // for (size_t j = 0; j < step; j++) + // { + // pix = (ptr1[j] + ptr2[j]) >> 1; + // ptr[j] = pix; + // } + // ptr1 += step + step; + // ptr2 += step + step; + // ptr += step; + // } + // return dst; } private: RockchipRga m_rkrga; @@ -108,6 +128,7 @@ ImageUsbHandler::ImageUsbHandler(std::shared_ptr images) H_ratio =*((float*)(&info.H_ratio)); V_ratio =*((float*)(&info.V_ratio)); m_rga.reset(new HG_RGA_()); + cv::setNumThreads(1); } ImageUsbHandler::~ImageUsbHandler() { @@ -408,7 +429,7 @@ void ImageUsbHandler::add_image(void *data, int width, int height, int type, int H_ratio=1.0f; if(V_ratio>1.2f || V_ratio <0.8f) V_ratio=1.0f; - + if(m_scanconfig.g200params.dpi==1) { #ifdef G100 @@ -416,7 +437,7 @@ void ImageUsbHandler::add_image(void *data, int width, int height, int type, int #else if(slow_moire) cv::resize(saveMat,saveMat,cv::Size(0,0),H_ratio,V_ratio*0.517,cv::InterpolationFlags::INTER_AREA); #endif - else cv::resize(saveMat,saveMat,cv::Size(0,0),H_ratio,V_ratio); + else cv::resize(saveMat,saveMat,cv::Size(0,0),H_ratio,V_ratio); } if(m_scanconfig.g200params.dpi == 2) { @@ -430,16 +451,38 @@ void ImageUsbHandler::add_image(void *data, int width, int height, int type, int } if(m_scanconfig.g200params.dpi == 3) cv::resize(saveMat,saveMat,cv::Size(0,0),H_ratio,V_ratio); // 600 dpi ��������ʵ600�ɼ� - + + // if(m_scanconfig.g200params.dpi==1) + // { + // #ifdef G100 + // if(slow_moire) saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio*0.482,cv::InterpolationFlags::INTER_AREA); + // #else + // if(slow_moire) saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio*0.517,cv::InterpolationFlags::INTER_AREA); + // #endif + // else saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio); + // } + // if(m_scanconfig.g200params.dpi == 2) + // { + // #ifdef G100 + // if(slow_moire) saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio*0.7241); + // #else + // if(slow_moire) saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio*0.7699); + // #endif + // else if((H_ratio != 1.0f) || (V_ratio != 1.0f)) + // saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio); + // } + // if(m_scanconfig.g200params.dpi == 3) + // saveMat = m_rga->HG_RGA_Resize(saveMat,cv::Size(0,0),H_ratio,V_ratio); // 600 dpi ��������ʵ600�ɼ� + cv::Mat imageMat; std::vector imgs; int actwidth = saveMat.cols / 2; int actheight = saveMat.rows; for (int i = 0; i < 2; i++) { - // imageMat = saveMat(cv::Rect(i * actwidth, 0, actwidth, actheight)) - imageMat = saveMat(cv::Rect(i * actwidth, 0, actwidth, actheight)).clone(); - //cv::imwrite("/root/img/"+std::to_string(num++)+".jpg",imageMat); + imageMat = saveMat(cv::Rect(i * actwidth, 0, actwidth, actheight)); + // imageMat = saveMat(cv::Rect(i * actwidth, 0, actwidth, actheight)).clone(); + // cv::imwrite("/root/img/"+std::to_string(num++)+".jpg",imageMat); // if(m_scanconfig.g200params.dpi == 3) imageMat = interpolation_600dpi(imageMat,false); // if(m_scanconfig.g200params.dpi==1) @@ -506,7 +549,7 @@ void ImageUsbHandler::add_image(void *data, int width, int height, int type, int if ((!m_hgimgconfig.is_duplex) && (imgs.size() > 1)) imgs.pop_back(); } - + for (auto &img : imgs) { cv::Mat enMat = img; @@ -560,12 +603,12 @@ bool ImageUsbHandler::is_limit(uint32_t type){ if (m_hgimgconfig.resolution_dst > 200.0 || m_hgimgconfig.papertype == 52 || m_hgimgconfig.papertype == 54 || m_hgimgconfig.papertype == 131) { - while (results.size() >= (m_scanconfig.g200params.dpi == 3 ? 1 : 2)) + while (results.size() >= (m_scanconfig.g200params.dpi == 3 ? 1 : 3)) { results.front().get(); results.pop(); } - if (encodeimgs.size() >= (m_scanconfig.g200params.dpi == 3 ? 1 : 2)) + if (encodeimgs.size() >= (m_scanconfig.g200params.dpi == 3 ? 1 : 3)) return true; } else diff --git a/scanner/scanner.cpp b/scanner/scanner.cpp index 8f4cb7e..c237ee0 100644 --- a/scanner/scanner.cpp +++ b/scanner/scanner.cpp @@ -807,6 +807,9 @@ bool Scanner::ExceptionCheck() } } #endif + uint reg5 =0; + mb->read(5,reg5); + printf("!!!!! motorboard regs 5 : 0x%x \n",reg5); return ret; } @@ -1469,7 +1472,7 @@ void Scanner::scan_process_8478(bool is_fixed) break; } { - //if(slow_moire) std::this_thread::sleep_for(std::chrono::milliseconds(50)); + // if(slow_moire) std::this_thread::sleep_for(std::chrono::milliseconds(50)); if(m_read_frame.valid()) m_read_frame.get(); if(m_init_frame.valid()) m_init_frame.get(); if(!is_fixed){ diff --git a/testcapimage/main.cpp b/testcapimage/main.cpp index e8e6ce6..6ad20ff 100644 --- a/testcapimage/main.cpp +++ b/testcapimage/main.cpp @@ -538,8 +538,8 @@ int main(int argc,char *argv[]) //fpgaparam.Sp = 4680; printf(" ----- set SP = %d ----\n",fpgaparam.Sp); cap->open(config,fpgaparam); - // cap->write_adc_8478(bank_change[0],0x22,0x8A,true); - // cap->write_adc_8478(bank_change[0],0x22,0x8A,false); + // cap->write_adc_8478(bank_change[0],0x22,0x84,true); + // cap->write_adc_8478(bank_change[0],0x22,0x84,false); cap->init_imagedatabuffer(); uint32_t reg4 = 0; regs->read(5,reg4); @@ -548,10 +548,18 @@ int main(int argc,char *argv[]) regs->read(15, fpgaversion); std::cout <write_adc_8478(bank_change[0],7+channel_*2,(i/0x100)&0x3,true); + // cap->write_adc_8478(bank_change[0],7+1+channel_*2,i&0xff,true); + // cap->write_adc_8478(bank_change[0],7+channel_*2,(i/0x100)&0x3,false); + // cap->write_adc_8478(bank_change[0],7+1+channel_*2,i&0xff,false); + // } + //bos cl1 cl0 en ch - for (size_t i = 0;i < 6 ;i++) - //for (size_t i = 0; ;i++) + // for (size_t i = 0; true/*i < 6*/ ;i++) + for (size_t i = 0; i <6 ;i++) { // config.g200params.dpi = i%3+1; // config.g200params.color = i<3; @@ -571,6 +579,7 @@ int main(int argc,char *argv[]) size_t width_mat = cap->width()*(config.g200params.color == 1 ? 3:1)*2; std::cout << "get img width : " << width_mat << " \t img height : " << buf.img_h << "\n"; cv::Mat mat(buf.img_h,width_mat,CV_8UC1,buf.pdata); + // cv::imwrite("/root/img/"+std::to_string(i)+"BRG.bmp",mat); auto merge = cap->merge_8478(mat,config.g200params.color,0); @@ -580,6 +589,22 @@ int main(int argc,char *argv[]) // cv::imwrite("/root/img/"+std::to_string(i)+"src.bmp",mat_rgb); //std::this_thread::sleep_for(std::chrono::milliseconds(200)); + // double max,min; + // cv::Point maxidx,minidx; + // bool need_save = false; + // int col = mat.cols /102; + // for(int j=0;j<102;j++) + // { + // cv::minMaxLoc(mat(cv::Rect(col*j,0,col,mat.rows)),&min,&max,&minidx,&maxidx); + // std::cout<< std::dec << "["< caculate(const std::vector& points_x, const std::vector& points_y) @@ -292,11 +293,30 @@ int main() // } // mean = std::accumulate(v.begin(),v.end(),0.0) / v.size() /1000.0; // printf("interpolation_600dpi mean time = %f \n",mean*2); - for(int i =0;i<52;i++) + + ThreadPool pool(5); + cv::Mat mat = cv::imread("/root/img/rga.png",cv::IMREAD_ANYCOLOR); + std::queue> fus; + for(int i=0;i<5000;i++) { - cv::imwrite("/root/img/rga_"+std::to_string(i)+".jpg",HG_RGA_Resize(cv::imread("/root/img/"+std::to_string(i)+".jpg",cv::IMREAD_COLOR),cv::Size(0,0),1.0,0.517)); + while(fus.size()>30) + { + fus.front().get(); + fus.pop(); + } + fus.push(pool.enqueue([i](cv::Mat mat){ + StopWatch sw; + HG_RGA_Resize(mat,cv::Size(0,0),1.0,0.517); + std::cout<< "rga "<> choice; @@ -102,6 +104,22 @@ int main() std::cout << "Please select again! " << std::endl; break; } + case 6: + { + std::vector buf; + buf.resize(3762*3200*3); + for(int i =0;i<(3762*3200*3);i++) + buf.push_back(i%256); + while (true) + { + cv::Mat mat(3672,rand()%1000+500,CV_8UC3,buf.data()); + usbImage->push(BmpImageEncode().encode(mat),true); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + while(usbImage->size() > 30) + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + } + break; + } default: std::cout << "Please select again! " << std::endl; break;