| | |
| | | #include<fstream> |
| | | #include "THSActionUtil.h" |
| | | #include <thread> |
| | | #include "TaskChecker.h" |
| | | bool L2DataCapture::inited; |
| | | bool L2DataCapture::tradeTimeCapture; |
| | | |
| | |
| | | //是否正在执行 |
| | | bool L2DataCapture::running; |
| | | bool L2DataCapture::runnings[THS_FRAME_COUNT]; |
| | | bool L2DataCapture::killRunnings[THS_FRAME_COUNT]; |
| | | clock_t L2DataCapture::latest_running_times[THS_FRAME_COUNT]; |
| | | |
| | | CallbackFun L2DataCapture::data_callback; |
| | |
| | | void L2DataCapture::_run(int index) |
| | | { |
| | | while (true) { |
| | | |
| | | if (killRunnings[index]) |
| | | break; |
| | | TaskChecker::clientLiveTime.l2[index] = clock(); |
| | | if (tradeTimeCapture) { |
| | | int time = getNowSecondTime(); |
| | | //9:20-11:31 12:59-15:01 |
| | |
| | | tradeQueueCapture[i] = new TradeQueueCapture(); |
| | | } |
| | | |
| | | |
| | | running = false; |
| | | int length = sizeof(runnings) / sizeof(runnings[0]); |
| | | for (int i = 0;i < length;i++) { |
| | | runnings[i] = false; |
| | | thread rt(&(L2DataCapture::_run), i); |
| | | rt.detach(); |
| | | killRunnings[i] = FALSE; |
| | | //thread rt_trade_queue(&(L2DataCapture::_run_trade_queue), i); |
| | | //rt_trade_queue.detach(); |
| | | } |
| | | |
| | | //获取同花顺窗口句柄 |
| | | try { |
| | |
| | | catch (string st) { |
| | | throw st; |
| | | } |
| | | running = false; |
| | | int length = sizeof(runnings) / sizeof(runnings[0]); |
| | | for (int i = 0;i < length;i++) { |
| | | runnings[i] = false; |
| | | thread rt(&(L2DataCapture::_run), i); |
| | | rt.detach(); |
| | | |
| | | //thread rt_trade_queue(&(L2DataCapture::_run_trade_queue), i); |
| | | //rt_trade_queue.detach(); |
| | | } |
| | | } |
| | | |
| | | void L2DataCapture::reCreateChannelRunner(int index) |
| | | { |
| | | //先杀死原有线程 |
| | | killRunnings[index] = TRUE; |
| | | Sleep(500); |
| | | killRunnings[index] = FALSE; |
| | | |
| | | thread rt(&(L2DataCapture::_run), index); |
| | | rt.detach(); |
| | | } |
| | | |
| | | bool L2DataCapture::isRunning() { |
| | |
| | | |
| | | clock_t starttime = clock(); |
| | | |
| | | /* |
| | | if (1 > 0) { |
| | | std:map<string, TradeData> map; |
| | | return map; |
| | | } |
| | | */ |
| | | list<TradeData> resultList= captureLevel2TradeData(openCLExcuter[identify], oimg, identify); |
| | | |
| | | std::cout << "-------L2行情识别结束任务: threadid-" << std::this_thread::get_id() << " 序号:" << identify << " 耗时:" << clock() - starttime <<" 数据量:"<< resultList.size() << endl; |
| | | |
| | | return resultList; |
| | | } |
| | | |
| | | list<TradeData> L2DataCapture::captureLevel2TradeData(OpenCLExcuter* openCLExcuter, cv::Mat oimg, int identify) |
| | | { |
| | | |
| | | //LogUtil::debug("截图完成"); |
| | | clock_t time_1 = clock(); |
| | |
| | | else { |
| | | if (oimg.channels() == 3) |
| | | { |
| | | openCLExcuter[identify]->rgb2Gray(oimg.data, oimg.cols, oimg.rows, imgData); |
| | | openCLExcuter->rgb2Gray(oimg.data, oimg.cols, oimg.rows, imgData); |
| | | } |
| | | else { |
| | | openCLExcuter[identify]->rgba2Gray(oimg.data, oimg.cols, oimg.rows, imgData); |
| | | openCLExcuter->rgba2Gray(oimg.data, oimg.cols, oimg.rows, imgData); |
| | | } |
| | | img.data = imgData; |
| | | oimg.release(); |
| | | clock_t time_2_ = clock(); |
| | | if (identify == 0) |
| | | { |
| | | std::cout << "灰度完成: threadid-" << std::this_thread::get_id() << " 耗时:" << (time_2_ - time_1) << endl; |
| | | std::cout << "灰度完成: threadid-" << std::this_thread::get_id() << " 耗时:" << (time_2_ - time_1) << " 截图尺寸:" << img.cols << "x" << img.rows << endl; |
| | | |
| | | std::cout <<"通道数:"<<oimg.channels()<<endl; |
| | | |
| | | std::cout << "通道数:" << oimg.channels() << endl; |
| | | |
| | | LogUtil::debug("灰度完成"); |
| | | } |
| | | } |
| | |
| | | } |
| | | //一维分块图像数据 |
| | | int* rowSplitDataOneLevel = (int*)malloc(sizeof(int) * rowDataList.size() * 4 * 7); |
| | | openCLExcuter[identify]->splitL2RowData(imgData, img.cols, img.rows, rowDataOneLevel, rowDataList.size(), rowSplitDataOneLevel); |
| | | openCLExcuter->splitL2RowData(imgData, img.cols, img.rows, rowDataOneLevel, rowDataList.size(), rowSplitDataOneLevel); |
| | | free(rowDataOneLevel); |
| | | |
| | | /* |
| | |
| | | //图像识别(除开数字的部分) |
| | | |
| | | int* notNumberResult = (int*)malloc(sizeof(int) * rowDataList.size() * 3); |
| | | openCLExcuter[identify]->recognitionNotNum(img.data, img.cols, img.rows, rowSplitDataOneLevel, 7, rowDataList.size(), notNumberResult); |
| | | openCLExcuter->recognitionNotNum(img.data, img.cols, img.rows, rowSplitDataOneLevel, 7, rowDataList.size(), notNumberResult); |
| | | |
| | | |
| | | int i = 0; |
| | |
| | | if (identify == 0) |
| | | std::cout << "数据准备-0数据准备: threadid-" << std::this_thread::get_id() << " 耗时:" << time_33 - time_32 << "总耗时:" << time_33 - time_1 << endl; |
| | | |
| | | openCLExcuter[identify]->splitL2Num(imgData, img.cols, img.rows, pos, 4 * rowDataList.size(), zeroData, _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER, totalNumberData); |
| | | openCLExcuter->splitL2Num(imgData, img.cols, img.rows, pos, 4 * rowDataList.size(), zeroData, _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER, totalNumberData); |
| | | free(zeroData); |
| | | free(pos); |
| | | |
| | |
| | | //准备模板数字 |
| | | uchar* templateNums = (unsigned char*)malloc(sizeof(unsigned char) * (_NUMBER_L2_HEIGHT * rowDataList.size()) * _NUMBER_L2_WIDTH * 10 * _NUMBER_L2_TOTAL_NUMBER); |
| | | |
| | | openCLExcuter[identify]->createNumberTemplates(rowDataList.size(), _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER, ImgUtil::numsOneLevel_level2, templateNums); |
| | | openCLExcuter->createNumberTemplates(rowDataList.size(), _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER, ImgUtil::numsOneLevel_level2, templateNums); |
| | | |
| | | //ImgUtil::createTemplateNumData(data.size()); |
| | | clock_t time_4 = clock(); |
| | |
| | | |
| | | |
| | | //数字识别 |
| | | uchar** numberResult = openCLExcuter[identify]->recognition_numbers(totalNumberData, templateNums, rowDataList.size() * _NUMBER_L2_HEIGHT, _NUMBER_L2_WIDTH * 10 * _NUMBER_L2_TOTAL_NUMBER, _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER); |
| | | uchar** numberResult = openCLExcuter->recognition_numbers(totalNumberData, templateNums, rowDataList.size() * _NUMBER_L2_HEIGHT, _NUMBER_L2_WIDTH * 10 * _NUMBER_L2_TOTAL_NUMBER, _NUMBER_L2_WIDTH, _NUMBER_L2_HEIGHT, _NUMBER_L2_TOTAL_NUMBER); |
| | | //释放内存 |
| | | free(totalNumberData); |
| | | free(templateNums); |
| | |
| | | rowDataList.clear(); |
| | | list<int*>().swap(rowDataList); |
| | | free(rowSplitDataOneLevel); |
| | | |
| | | if (identify == 0) |
| | | std::cout << "-------L2行情识别结束任务: threadid-" << std::this_thread::get_id() << " 序号:" << identify << " 耗时:" << clock() - starttime << endl; |
| | | |
| | | return resultList; |
| | | } |
| | | |