#include #include #include #include #ifdef _MSC_VER #include #endif #include "highgui.h" #include "cv.h" #include #include #include "left_over_det.h" #include #include "RegionAssist.h" using namespace std; using namespace cv; void imag_ana_3channels(); void algorthim_thread1(); int main() { for(int i = 0;i < 10;++i) { imag_ana_3channels(); } system("pause"); } #include #include void algorthim_thread1() { void *tools = nullptr; rs_param param; param.frame_num = 10; if (rs_init(&tools, param) != 0) cout << "hp_init ailed!" << endl; IplImage * src = cvLoadImage("./test.jpg"); sy_img img; img.set_data(src->width, src->height, 3, (unsigned char*)src->imageData); rs_result res; rs_process(tools, img, &res); rs_release(&tools); printf("thread finish\n"); } void imag_ana_3channels() { //AlarmInfo 1进入禁区 2离开禁区 3单向越界 4双向越界 5徘徊 6丢包 void *tools = nullptr; rs_param param; param.frame_num = 10; param.scale = 2; param.rect_num = 1; param.max_obj_num = 2; { param.rect[1].left_ = 30; param.rect[1].top_ = 0; param.rect[1].width_ = 930; param.rect[1].height_ = 1080; param.rect[0].left_ = 900; param.rect[0].top_ = 0; param.rect[0].width_ = 960; param.rect[0].height_ = 960; } strcpy(param.auth.url, "192.168.10.4"); param.auth.port = 8888; param.type = PRODUCT_ID; if (rs_init(&tools, param) != 0) { cout << "hp_init ailed!" << endl; return; } else { printf("hp_init suceed!\n"); } char imgpath[260]; CvCapture* video1 = cvCaptureFromFile("./convert.mp4"); // 用opencv函数读取视频的一帧 //IplImage * src = cvQueryFrame(video1); IplImage *src = cvQueryFrame(video1); while (src) { src = cvQueryFrame(video1); //auto frame = cvCloneImage(src); if (!src) break; double scale = 1.0; int width = src->width / scale; int height = src->height / scale; //width = 1912; IplImage * srcscale = cvCreateImage(cvSize(width, height), 8, 3); //用于缩放 当前先不缩放 //CvVideoWriter *writer = cvCreateVideoWriter("result_2019_9_23.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, cvSize(srcscale->width, srcscale->height)); cvResize(src, srcscale); sy_img syimg; syimg.set_data(srcscale->width, srcscale->height, srcscale->nChannels, (unsigned char *)srcscale->imageData); rs_result result{}; result.del_infos = new ms_object_info[param.max_obj_num * param.rect_num]{}; result.obj_infos = new ms_object_info[param.max_obj_num * param.rect_num]{}; rs_process(tools, syimg, &result); if (result.del_count != 0) { for (int i = 0; i < result.del_count; ++i) { printf("delete object id = %d\n", result.del_infos[i].unique_id); } } ExternalRectangle((unsigned char*)(srcscale->imageData), srcscale->width, srcscale->height, result.obj_infos, result.obj_count, srcscale->widthStep,1); CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 2, 8); std::string str; std::string alarm; for (int i = 0; i < result.obj_count; i++) { for (int j = 0; j < 1; j++) { if (result.obj_infos[i].pb_alarm_type[j]) { switch (result.obj_infos[i].pb_alarm_type[j]) { case 1: printf("obj %d: 进入禁区\n", result.obj_infos[i].unique_id); str = " 有目标闯入禁区 "; break; case 2: printf("obj %d: 离开禁区\n", result.obj_infos[i].unique_id); str = " 有目标离开禁区 "; break; case 3: printf("obj %d: 单向越界\n", result.obj_infos[i].unique_id); str = " 有目标单向越界 "; break; case 4: printf("obj %d: 双向越界\n", result.obj_infos[i].unique_id); str = " 有目标越界 "; break; case 5: printf("obj %d: 徘徊\n", result.obj_infos[i].unique_id); str = " 有目标在禁区内徘徊 "; break; case 6: printf("obj %d: 丢包\n", result.obj_infos[i].unique_id); str = " 丢包 "; alarm += std::to_string(result.obj_infos[i].unique_id); alarm += " Packet loss"; cvPutText(srcscale, alarm.c_str(), cvPoint(40, 40), &font, cvScalar(255, 0, 0, 1)); break; default: break; } } else { ; } } } delete[] result.del_infos; delete[] result.obj_infos; //cvWriteFrame(writer, srcscale); // 图像显示 //cvShowImage("1channels", srcscale); cvReleaseImage(&srcscale); //cvReleaseImage(&frame); //cvWaitKey(1); //break; } rs_release(&tools); //cvReleaseImage(&src); cvReleaseCapture(&video1); }