demo.cpp 4.24 KB
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#ifdef _MSC_VER
#include <windows.h>
#endif 


#include "highgui.h"
#include "cv.h"
#include <deque>
#include <opencv2/opencv.hpp>
#include "left_over_det.h"
#include <chrono>
#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 <cv.h>
#include <highgui.h>

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 = 1;
	param.rect_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("./test.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{};
		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
				{
					;
				}
			}


		}
		//cvWriteFrame(writer, srcscale);
		
		// 图像显示
		//cvShowImage("1channels", srcscale);
		cvReleaseImage(&srcscale);
		//cvReleaseImage(&frame);
		//cvWaitKey(1);
		//break;
	}
	rs_release(&tools);
	//cvReleaseImage(&src);
	cvReleaseCapture(&video1);
	

}