0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于飛凌嵌入式OK113i網(wǎng)頁(yè)視頻監(jiān)控項(xiàng)目

嵌入式技術(shù) ? 來(lái)源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2024-01-08 22:57 ? 次閱讀

1.開(kāi)發(fā)板簡(jiǎn)介

OK113i-S開(kāi)發(fā)板采用核心板+底板的結(jié)構(gòu)形式,基于全志T113-i處理器設(shè)計(jì)開(kāi)發(fā),處理器為ARMCortex-A7, RISCV, HiFi4 DSP多核異構(gòu)架構(gòu),主頻1.2GHz,核心板有兩種規(guī)格,分別是512MB DDR3L內(nèi)存加8GB eMMC版本和256MB DDR3L內(nèi)存加256MB SPI Nand版本。OK113i-S開(kāi)發(fā)板將核心板的功能接口資源豐富、提供多種外設(shè)接口,如網(wǎng)卡、CPU內(nèi)置音頻Codec、ADC、TF Card、LVDS、RGB、WIFI、4G等功能接口。

2.硬件開(kāi)發(fā)平臺(tái)

開(kāi)發(fā)平臺(tái):Linux-5.4

編譯器:arm-linux-gnueabi-gcc 7.3.1

USB攝像頭

OK113i開(kāi)發(fā)板

實(shí)現(xiàn)功能:通過(guò)OK113i飛凌嵌入式開(kāi)發(fā)板,采用USB設(shè)備頭,通過(guò)V4L2框架實(shí)現(xiàn)視頻圖像采集。創(chuàng)建攝像頭圖像采集線程,搭建HTTP服務(wù)器,固定端口號(hào)為8080,建立HTTP長(zhǎng)連接,實(shí)現(xiàn)網(wǎng)頁(yè)視頻監(jiān)控。

wKgaomWcCPiAadZLADnMcr04vyA576.pngwKgaomWcCW-AQ7roAFOLMXM97TI381.png

3.功能實(shí)現(xiàn)

1.移植交叉編譯器arm-linux-gnueabi-gcc。

2.移植矢量字庫(kù)freetye。

3.初始化攝像頭,通過(guò)V4L2驅(qū)動(dòng)框架實(shí)現(xiàn)攝像頭編程;

4.創(chuàng)建攝像頭采集線程,搭建HTTP服務(wù)器,多線程處理http客戶端數(shù)據(jù)請(qǐng)求,建立http長(zhǎng)連接;

5.采用互斥鎖+條件變量方式實(shí)現(xiàn)多線程間資源保護(hù),將攝像頭采集圖像實(shí)時(shí)上傳至網(wǎng)頁(yè)端;

4.矢量字庫(kù)編譯與移植

FreeType 庫(kù)是一個(gè)完全免費(fèi)(開(kāi)源)的、高質(zhì)量的且可移植的字體引擎,它提供統(tǒng)一的接口來(lái)訪問(wèn)多種字體格式文件,可以非常方便我們開(kāi)發(fā)字體顯示相關(guān)的程序功能。它支持單色位圖、反走樣位圖的渲染。 FreeType 庫(kù)是高度模塊化的程序庫(kù),雖然它是使用 ANSI C開(kāi)發(fā),但是采用面向?qū)ο蟮乃枷?,因此?FreeType 的用戶可以靈活地對(duì)它進(jìn)行裁剪。關(guān)于freetype 的詳細(xì)信息可以參考 freetype 的官方網(wǎng)站:https://www.freetype.org/來(lái)獲取更多相關(guān)的信息。

wKgZomWcCp2AFpH8AAwzInNqcm4185.png

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/freetype-2.4.10.tar.bz2
[wbyq@wbyq src_pack]$ cd freetype-2.4.10/
[wbyq@wbyq freetype-2.4.10]$ ./configure --prefix=$PWD/_install --host=arm-linux
[wbyq@wbyq freetype-2.4.10]$ make && make install

5.V4L2攝像頭編程

V4L2 是 Video for linux2 的簡(jiǎn)稱,為 linux 中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng)。在 Linux 中,視頻設(shè)備是設(shè)備文件,可以像訪問(wèn)普通文件一樣對(duì)其進(jìn)行讀寫(xiě),攝像頭在/dev/video*下,如果只有一個(gè)視頻設(shè)備,通常為/dev/video0。V4L2 是針對(duì) uvc 免驅(qū) usb 設(shè)備的編程框架,主要用于采集 usb 攝像頭等,編程模式如下:

wKgaomWcC2OAHt_-AAKSjArmBCM337.png

攝像頭初始化示例如下:

/*

攝像頭初始化

返回值:成功返回?cái)z像頭描述符,失敗返回負(fù)數(shù)

*/

int Video_Init(struct CAMERA *camera)

{

    int video_fd;

    int i=0;

	/*1.打開(kāi)設(shè)備節(jié)點(diǎn)*/

	video_fd=open(VIDEO_DEV,O_RDWR);

	if(video_fd==-1)return -1;

	/*2.設(shè)置攝像頭格式*/

	struct v4l2_format format;

	memset(&format,0,sizeof(format));

	format.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;//視頻捕獲格式

	format.fmt.pix.width=800;

	format.fmt.pix.height=480;

	format.fmt.pix.pixelformat=V4L2_PIX_FMT_YUYV;//圖像數(shù)據(jù)格式y(tǒng)uyv

	if(ioctl(video_fd,VIDIOC_S_FMT,&format))return -2;

	printf("圖像尺寸:%d * %dn",format.fmt.pix.width,format.fmt.pix.height);

	camera->image_w=format.fmt.pix.width;

	camera->image_h=format.fmt.pix.height;

	/*3.向內(nèi)核請(qǐng)求緩沖區(qū)*/

	struct v4l2_requestbuffers reqbuf;

	memset(&reqbuf,0,sizeof(reqbuf));

	reqbuf.count=4;/*緩沖區(qū)個(gè)數(shù)*/

	reqbuf.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;//視頻捕獲格式

	reqbuf.memory=V4L2_MEMORY_MMAP;/*內(nèi)存映射*/

	if(ioctl(video_fd,VIDIOC_REQBUFS,&reqbuf))return -3;

	printf("緩沖區(qū)個(gè)數(shù):%dn",reqbuf.count);

	/*4.將緩沖區(qū)映射到進(jìn)程空間*/

	struct v4l2_buffer quebuff;

	for(i=0;imamp_buff[i]=mmap(NULL,quebuff.length,PROT_READ|PROT_WRITE,MAP_SHARED,video_fd,quebuff.m.offset);

		printf("buff[%d]=%pn",i,camera->mamp_buff[i]);

		camera->mmap_size=quebuff.length;

	}

	/*5.將緩沖區(qū)添加到采集隊(duì)列*/

	for(i=0;i

6.搭建HTTP服務(wù)器

HTTP 協(xié)議是 Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫(xiě),是用于從萬(wàn)維網(wǎng)(WWW:World WideWeb )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP 是基于客戶端/服務(wù)端(C/S)的架構(gòu)模型,通過(guò)一個(gè)可靠的鏈接來(lái)交換信息,是一個(gè)無(wú)狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議。一個(gè) HTTP"客戶端"是一個(gè)應(yīng)用程序(Web 瀏覽器或其他任何客戶端),通過(guò)連接到服務(wù)器達(dá)到向服務(wù)器發(fā)送一個(gè)或多個(gè) HTTP 的請(qǐng)求的目的。一個(gè) HTTP"服務(wù)器"同樣也是一個(gè)應(yīng)用程序通過(guò)接收客戶端的請(qǐng)求并向客戶端發(fā)送 HTTP 響應(yīng)數(shù)據(jù)。HTTP 使用統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers, URI)來(lái)傳輸數(shù)據(jù)和建立連接。

HTTP服務(wù)器創(chuàng)建示例:

/*1.創(chuàng)建網(wǎng)絡(luò)套接字*/

    sockfd=socket(AF_INET,SOCK_STREAM,0);

    if(sockfd==-1)

	 {

		 printf("創(chuàng)建socket套接字失敗n");

		 return 0;

	 }

     /*允許綁定已使用的端口號(hào)*/

	 int on = 1;

	 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

	 /*2.綁定端口號(hào)*/

	 struct sockaddr_in addr=

	 {

		.sin_family=AF_INET,//IPV4

		.sin_port=htons(HTTP_SERVER_PORT),//端口號(hào)

		.sin_addr.s_addr=INADDR_ANY,//本地所有IP

	 };

	 if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)))

	 {

		 printf("綁定端口號(hào)失敗n");

		 return 0;

	 }

	 /*設(shè)置監(jiān)聽(tīng)數(shù)量*/

	 listen(sockfd,100);

	 /*等待客戶端連接*/

	 struct sockaddr_in c_addr;

	 socklen_t addrlen=sizeof(c_addr);

	 int c_fd;

	 int *p;

	 while(1)

	 {

		 c_fd=accept(sockfd, (struct sockaddr *)&c_addr,&addrlen);

		 if(c_fd==-1)continue;

		 printf("%d 客戶端連接成功%s:%dn",c_fd,inet_ntoa(c_addr.sin_addr),ntohs(c_addr.sin_port));

		 p=malloc(sizeof(int));

		 *p=c_fd;

		 pthread_create(&pthid,NULL,pth_work,p);

		 pthread_detach(pthid);//設(shè)置分離屬性

	 }   

7.網(wǎng)頁(yè)視頻監(jiān)控處理

創(chuàng)建攝像頭采集線程,將采集的圖像進(jìn)行JPG格式編碼,挺添加時(shí)間水印信息。攝像頭處理線程如下:

/*攝像頭處理函數(shù)*/

void *pth_camera_work(void *arg)

{

    LCD_Init();//LCD初始化

    video_fd=Video_Init(&camera);//攝像初始化

    if(video_fd

8.運(yùn)行效果

wKgaomWcDRiAQ9bcAEe1tnzB810217.png

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302023
  • 視頻監(jiān)控
    +關(guān)注

    關(guān)注

    17

    文章

    1706

    瀏覽量

    64875
  • 飛凌
    +關(guān)注

    關(guān)注

    0

    文章

    133

    瀏覽量

    16086
  • V4L2
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    3880
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    技術(shù)帖 | 飛嵌入式T113-i開(kāi)發(fā)板的休眠及喚醒操作

    嵌入式OK113i-S開(kāi)發(fā)板支持兩種休眠方式:freeze和mem。本篇內(nèi)容小編會(huì)為大家介紹如何讓飛嵌入式
    的頭像 發(fā)表于 12-29 08:02 ?1170次閱讀
    技術(shù)帖 | 飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開(kāi)發(fā)板的休眠及喚醒操作

    【飛 OK113i-C 全志T113-i開(kāi)發(fā)板】視頻編解碼測(cè)試

    前言本文測(cè)試OK113i-S開(kāi)發(fā)板-視頻編解碼的功能OK113i-S開(kāi)發(fā)板是支持視頻的編解碼的,下面是官方介紹的編解碼功能T113-i 是一
    發(fā)表于 12-25 09:41

    【飛OK113i-S開(kāi)發(fā)板試用】基于飛嵌入式OK113i網(wǎng)頁(yè)視頻監(jiān)控項(xiàng)目

    :arm-linux-gnueabi-gcc 7.3.1 USB攝像頭 OK113i開(kāi)發(fā)板實(shí)現(xiàn)功能:通過(guò)OK113i嵌入式開(kāi)發(fā)板,采用USB設(shè)備頭,通過(guò)V4L2框架實(shí)現(xiàn)
    發(fā)表于 01-09 11:31

    雙核Cortex-A7 CPU、64位玄鐵C906 RISC-V CPU,OK113i-S開(kāi)發(fā)板開(kāi)發(fā)體驗(yàn)

    OK113i網(wǎng)頁(yè)視頻監(jiān)控項(xiàng)目 實(shí)現(xiàn)功能: 通過(guò)OK113i
    發(fā)表于 01-16 10:07

    嵌入式全志T113-i開(kāi)發(fā)板的休眠及喚醒操作

    嵌入式OK113i-S開(kāi)發(fā)板支持兩種休眠方式:freeze和mem。這兩種方式可以通過(guò)/sys/power/state文件節(jié)點(diǎn)進(jìn)行操作,用戶可以通過(guò)在該文件節(jié)點(diǎn)寫(xiě)入freeze或mem來(lái)觸發(fā)相應(yīng)
    發(fā)表于 01-17 09:29

    OK210申請(qǐng)】基于飛嵌入式OK210的多媒體播放系統(tǒng)

    微博,http://weibo.com/2840996695/profile?topnav=1&amp;wvr=6項(xiàng)目描述:項(xiàng)目名稱:基于飛
    發(fā)表于 07-06 17:37

    OK210申請(qǐng)】基于飛嵌入式智能家居系統(tǒng)飛嵌入式OK210開(kāi)發(fā)板申請(qǐng)

    3.組員:三名,王亞玲,魏玉娟,張向前4.研發(fā)的方向?yàn)橹悄芗揖?b class='flag-5'>嵌入式方向5.本人自小就有對(duì)電子又很濃厚的興趣,在大學(xué)研究過(guò)微型空調(diào)的設(shè)計(jì)制作,單片機(jī)系統(tǒng),嵌入式,機(jī)器人等項(xiàng)目項(xiàng)目描述:
    發(fā)表于 07-13 12:03

    【實(shí)戰(zhàn)項(xiàng)目一:嵌入式視頻監(jiān)控系統(tǒng)】【初學(xué)必學(xué)】

    網(wǎng)頁(yè)視頻監(jiān)控系統(tǒng)實(shí)戰(zhàn)項(xiàng)目(驅(qū)動(dòng)移植部分一)2.【創(chuàng)科之龍】嵌入式網(wǎng)頁(yè)
    發(fā)表于 07-19 18:18

    OK210申請(qǐng)】基于飛嵌入式智能家居系統(tǒng)

    可以用它來(lái)開(kāi)發(fā)小軟件。項(xiàng)目描述:基于飛嵌入式的智能家居,通過(guò)對(duì)飛的了解,感覺(jué)選擇飛
    發(fā)表于 07-25 17:19

    OK210申請(qǐng)】基于arm嵌入式監(jiān)控智能小車(chē)的設(shè)計(jì)與實(shí)現(xiàn)

    視頻流的讀取該項(xiàng)目仍在進(jìn)行中真的很希望可以獲得飛ok210的開(kāi)發(fā)板進(jìn)行arm平臺(tái)的移植和后面項(xiàng)目的實(shí)現(xiàn),以及對(duì)飛
    發(fā)表于 08-03 09:40

    分享一個(gè)不錯(cuò)的基于飛嵌入式A40i實(shí)現(xiàn)網(wǎng)約車(chē)車(chē)載終端方案

    分享一個(gè)不錯(cuò)的基于飛嵌入式A40i實(shí)現(xiàn)網(wǎng)約車(chē)車(chē)載終端方案
    發(fā)表于 12-27 07:18

    OK113i-C 全志T113-i開(kāi)發(fā)板初體驗(yàn)

    All available board: 0. ok113i Choice [ok113i]: 0 All available flash: 0. default 1. nor 2. nand
    發(fā)表于 12-14 15:33

    嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法,就是這樣簡(jiǎn)單

    的配備為客戶提供了更加多樣的選擇。今天小編就與大家分享一下為飛嵌入式OK113i-S開(kāi)發(fā)板適配LVDS屏幕的過(guò)程。
    的頭像 發(fā)表于 01-12 11:50 ?2144次閱讀
    飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開(kāi)發(fā)板的調(diào)屏方法,就是這樣簡(jiǎn)單

    如何在飛嵌入式T113-i開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?

    嵌入式OK113i-S開(kāi)發(fā)板上市一段時(shí)間以來(lái)收獲了很多關(guān)注,也成為了許多客戶項(xiàng)目選型的優(yōu)質(zhì)之選。在實(shí)際的項(xiàng)目開(kāi)發(fā)中,工程師朋友們可能會(huì)需
    的頭像 發(fā)表于 01-26 08:02 ?460次閱讀
    如何在飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?

    嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法

    對(duì)于飛嵌入式T113-i開(kāi)發(fā)板的調(diào)屏問(wèn)題,需要按照以下步驟進(jìn)行操作
    的頭像 發(fā)表于 01-29 16:25 ?867次閱讀