1.禁用opencv多核处理,提高程序稳定性

2.修改采集板12、21号寄存器
This commit is contained in:
masayume_ht 2024-03-13 17:50:52 +08:00
parent ed2576f160
commit b6ce99ca7b
9 changed files with 135 additions and 26 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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<UsbImageProcQueue> images)
H_ratio =*((float*)(&info.H_ratio));
V_ratio =*((float*)(&info.V_ratio));
m_rga.reset(new HG_RGA_());
cv::setNumThreads(1);
}
ImageUsbHandler::~ImageUsbHandler()
{
@ -431,15 +452,37 @@ 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 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ600<30>ɼ<EFBFBD>
// 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 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ600<30>ɼ<EFBFBD>
cv::Mat imageMat;
std::vector<cv::Mat> 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)
@ -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

View File

@ -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){

View File

@ -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 <<std::hex<<"fpgaversion:0x" << fpgaversion << std::endl;
int ix = 0;
// for(int channel_ = 0;channel_<9;channel_++)
// {
// int i = 120*channel_;
// cap->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 << "["<<col*j<<","<<col*(j+1)<<"] min:"<< min << " max:" << max <<std::endl;
// if(max != min){
// need_save = true;
// break;
// }
// }
// if(need_save)
// cv::imwrite("/root/"+std::to_string(i) +"_.bmp",mat);
// double max,min;
// cv::Point maxidx,minidx;
// cv::minMaxLoc(mat(cv::Rect(mat.cols /2 + 10,0,mat.cols /2 - 10 ,mat.rows)),&min,&max,&minidx,&maxidx);

View File

@ -9,6 +9,7 @@
#include "imageencode.h"
#include "ImageApply.h"
#include "ImageApplyHeaders.h"
#include "ThreadPool.h"
std::vector<double> caculate(const std::vector<double>& points_x, const std::vector<double>& points_y)
@ -292,9 +293,28 @@ 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<std::future<void>> 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 "<<i<< "times : "<< sw.elapsed_ms() <<std::endl;
},
mat.clone()));
}
while (fus.size())
{
fus.front().get();
fus.pop();
}
return 0;

View File

@ -18,6 +18,7 @@
#include "imageusbtesthandler.h"
#include "applog.h"
#include "jsonconfig.h"
#include "imageencode.h"
using namespace std;
@ -33,6 +34,7 @@ int menu()
cout << "(2) clear notify. " << endl;
cout << "(3/4) autocorrect " << endl;
cout << "(5) color mode change test " << endl;
cout << "(6) test usb transmit "<< endl;
cout << "(0) Quit. " << endl
<< endl;
cout << ": ";
@ -102,6 +104,22 @@ int main()
std::cout << "Please select again! " << std::endl;
break;
}
case 6:
{
std::vector<std::uint8_t> 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;