系列文章目录

ESP32CAM识别图形左边界(一):初步使用ESP32CAM

ESP32CAM识别图形左边界(二):网页添加补光灯按钮

ESP32CAM识别图形左边界(三):识别图像左边界


目录

系列文章目录

前言

一、添加开启边界识别的按钮

(1) 修改camera_index.h文件

(2) 修改app_httpd.cpp文件

二、图像数据处理

1.新建结构体

2.具体实现

3.实验结果


前言

之前两篇文章中,第一篇介绍了ESP32-CAM相机网页相关的使用方法,第二篇介绍了如何在相机的网页中添加自己的内容,最后一篇则真正的开始使用相机里面的图像了,因为我的环境比较简单,图像中只有物体和纯色背景,而且只需要图片中的左边界线。


一、添加开启边界识别的按钮

(1) 修改camera_index.h文件

同上一篇文章一样,修改网页模板文index_ov2640.html,增加下面的代码,并一起去除了人脸识别的功能开关,然后打包成index_ov2640.html.gz文件,之后使用Beyond Compare以十六进制格式打开。

                        <div class="input-group" id="line-detect"><label for="linedetect">Line Detect</label><div class="switch"><input id="linedetect" type="checkbox" class="default-action"><label class="slider" for="linedetect"></label></div></div>

index_ov2640.html.gz文件的十六进制数据

0x1F,0x8B,0x08,0x08,0x25,0xD3,0xA1,0x61,0x00,0x03,0x69,0x6E,0x64,0x65,0x78,0x5F,0x6F,0x76,0x32,0x36,0x34,0x30,0x2E,0x68,0x74,0x6D,0x6C,0x00,0xE5,0x5D,0x7B,0x73,0xD3,0xC6,0x16,0xFF,0x9F,0x4F,0x21,0x44,0x4B,0xEC,0x69,0xEC,0xD8,0x4E,0x08,0xC1,0xB5,0xC5,0x85,0x10,0xA0,0x33,0xBC,0x4A,0x5A,0xDA,0x99,0x4E,0x07,0xD6,0xD2,0xCA,0x56,0x91,0x25,0x57,0x5A,0xD9,0x49,0x99,0x7C,0x8E,0xFB,0x81,0xEE,0x17,0xBB,0x67,0x1F,0x92,0x56,0xF2,0xEA,0x65,0x83,0xCD,0xE5,0x3A,0x33,0x45,0x96,0xF6,0x9C,0x3D,0xE7,0xFC,0xCE,0x6B,0xD7,0x92,0x3A,0xBA,0x6D,0xF9,0x26,0xB9,0x5E,0x60,0x6D,0x46,0xE6,0xAE,0x71,0x6B,0xC4,0xFF,0xD1,0xE0,0x33,0x9A,0x61,0x64,0xF1,0x43,0xF6,0x75,0x8E,0x09,0xD2,0xCC,0x19,0x0A,0x42,0x4C,0xC6,0x7A,0x44,0xEC,0xCE,0x99,0x9E,0xBF,0xEC,0xA1,0x39,0x1E,0xEB,0x4B,0x07,0xAF,0x16,0x7E,0x40,0x74,0xCD,0xF4,0x3D,0x82,0x3D,0x18,0xBE,0x72,0x2C,0x32,0x1B,0x5B,0x78,0xE9,0x98,0xB8,0xC3,0xBE,0x1C,0x3A,0x9E,0x43,0x1C,0xE4,0x76,0x42,0x13,0xB9,0x78,0xDC,0x97,0x79,0x11,0x87,0xB8,0xD8,0xB8,0xB8,0x7C,0x73,0x3C,0xD0,0x5E,0xBF,0x1B,0x9C,0x9C,0xF6,0x46,0x47,0xFC,0x5C,0x3A,0x26,0x24,0xD7,0xF2,0x77,0xFA,0x99,0xF8,0xD6,0xB5,0xF6,0x29,0x73,0x8A,0x7E,0x6C,0x10,0xA2,0x63,0xA3,0xB9,0xE3,0x5E,0x0F,0xB5,0x47,0x01,0xCC,0x79,0xF8,0x1C,0xBB,0x4B,0x4C,0x1C,0x13,0x1D,0x86,0xC8,0x0B,0x3B,0x21,0x0E,0x1C,0xFB,0xC7,0x35,0xC2,0x09,0x32,0x3F,0x4E,0x03,0x3F,0xF2,0xAC,0xA1,0x76,0xA7,0x7F,0x46,0xFF,0xD6,0x07,0x99,0xBE,0xEB,0x07,0x70,0xFD,0xE2,0x29,0xFD,0x5B,0xBF,0xCE,0x66,0x0F,0x9D,0x7F,0xF0,0x50,0xEB,0x9F,0x2E,0xAE,0x32,0xD7,0x6F,0x6E,0x65,0xBE,0xCE,0x06,0x45,0xD2,0x0B,0xFA,0xB3,0x72,0xFA,0x10,0x9B,0xC4,0xF1,0xBD,0xEE,0x1C,0x39,0x9E,0x82,0x93,0xE5,0x84,0x0B,0x17,0x81,0x0D,0x6C,0x17,0x97,0xF2,0xB9,0x33,0xC7,0x5E,0x74,0x58,0xC1,0x8D,0x32,0xE9,0x58,0x4E,0xC0,0x47,0x0D,0xA9,0x1D,0xA2,0xB9,0x57,0xC9,0xB6,0x4C,0x2E,0xCF,0xF7,0xB0,0xC2,0x80,0x74,0xA2,0x55,0x80,0x16,0x74,0x00,0xFD,0x77,0x7D,0xC8,0xDC,0xF1,0xB8,0x53,0x0D,0xB5,0xE3,0x93,0xDE,0xE2,0xAA,0x02,0xCA,0xE3,0x53,0xFA,0xB7,0x3E,0x68,0x81,0x2C,0xCB,0xF1,0xA6,0x43,0xED,0x4C,0xC9,0xC2,0x0F,0x2C,0x1C,0x74,0x02,0x64,0x39,0x51,0x38,0xD4,0x4E,0x54,0x63,0xE6,0x28,0x98,0x82,0x2C,0xC4,0x07,0x61,0x3B,0x7D,0xA5,0x24,0x62,0x48,0xE0,0x4C,0x67,0x04,0x20,0x5D,0x1B,0x93,0x37,0x9A,0x08,0xA1,0x2A,0x3C,0x4B,0xED,0xA6,0xB6,0x1A,0x72,0x9D,0xA9,0xD7,0x71,0x08,0x9E,0x83,0x3A,0x21,0x09,0x30,0x31,0x67,0x65,0xA2,0xD8,0xCE,0x34,0x0A,0xB0,0x42,0x90,0xC4,0x6E,0x25,0x0A,0xC3,0xC5,0xF5,0x4B,0x9D,0x15,0x9E,0x7C,0x74,0x48,0x47,0xD8,0x64,0x82,0x6D,0x3F,0xC0,0xCA,0x91,0xF1,0x08,0xD7,0x37,0x3F,0x76,0x42,0x82,0x02,0x52,0x87,0x21,0xB2,0x09,0x0E,0xAA,0xF9,0x61,0xEA,0x15,0xD5,0xDC,0x8A,0xA7,0x15,0x03,0x1C,0xCF,0x75,0x3C,0x5C,0x5F,0xBC,0xA2,0x79,0xB3,0xEC,0xF8,0xA8,0x1A,0xC0,0x38,0xF3,0x69,0x99,0x97,0x30,0x5D,0xD7,0x27,0x13,0x71,0xD3,0xEF,0xF5,0xBE,0x5F,0xBF,0x38,0xC3,0xDC,0x4D,0x51,0x44,0xFC,0xED,0x23,0x62,0x2D,0xAC,0x72,0x7A,0xFC,0x6B,0x8E,0x2D,0x07,0x69,0x2D,0x29,0x9C,0xCF,0x7A,0xE0,0x53,0x6D,0x0D,0x79,0x96,0xD6,0xF2,0x03,0x07,0x02,0x01,0xB1,0x74,0xE3,0xC2,0x19,0x28,0x1C,0x0B,0xDC,0x56,0xA8,0x5C,0x12,0x33,0xB2,0x45,0xD4,0x61,0x43,0x3F,0x35,0x52,0x0E,0xFD,0x54,0x06,0x90,0x42,0x47,0xC6,0xBE,0x0C,0x2F,0x59,0xC2,0x22,0xCC,0xE8,0x67,0x8E,0xAE,0x3A,0xA5,0xD8,0xC5,0x83,0x62,0x0C,0xA1,0xCC,0x9A,0x2D,0x18,0xBA,0x9C,0x69,0x1D,0x8D,0x66,0xC9,0xB6,0x9A,0x46,0x30,0x55,0x43,0x4E,0x3F,0xB2,0x53,0x34,0x50,0x57,0xAD,0x6A,0x9A,0x3B,0xF8,0x9F,0xCA,0x87,0xB8,0x26,0x85,0x59,0x84,0x7E,0xEA,0x67,0x92,0x94,0x59,0x65,0x36,0x51,0x30,0x2E,0xCE,0x28,0x6B,0x7C,0x8B,0xA2,0x5B,0xC1,0xB5,0x5C,0x84,0xBA,0xD9,0x45,0xC1,0xB8,0x4C,0x86,0xCA,0x2C,0x43,0x3F,0x37,0x35,0xFA,0x8D,0x3B,0x93,0x88,0x10,0xDF,0x0B,0xB7,0x2A,0x51,0x45,0x71,0xF6,0x57,0x14,0x12,0xC7,0xBE,0xEE,0x88,0x90,0x86,0x38,0x5B,0x20,0x68,0x21,0x27,0x98,0xAC,0x30,0x2E,0x6F,0x37,0x3C,0xB4,0x84,0xBC,0x33,0x9D,0xBA,0x2A,0xDF,0x33,0xA3,0x20,0xA4,0x7D,0xDB,0xC2,0x77,0x80,0x71,0xB0,0x3E,0x71,0x36,0x06,0x6B,0x4E,0xD4,0x31,0x27,0x8A,0xB9,0xFC,0x88,0x50,0x1B,0x2B,0x91,0xF0,0x41,0x1D,0x87,0x5C,0x2B,0xAF,0x89,0x48,0x54,0x5C,0x89,0x43,0xB0,0xB4,0x2C,0x64,0xE5,0x1A,0x9A,0x33,0x6C,0x7E,0xC4,0xD6,0x0F,0x95,0x6D,0x58,0x55,0x7B,0xD8,0x75,0xBC,0x45,0x44,0x3A,0xB4,0x9D,0x5A,0x7C,0x11,0xCC,0x99,0x43,0xC6,0x2A,0x0E,0x06,0x65,0x4D,0xC5,0xBD,0xC5,0x55,0xB9,0x11,0x64,0x61,0x0D,0x17,0x4D,0xB0,0x5B,0x26,0xB2,0x08,0x86,0x82,0xB4,0x2B,0x72,0x55,0x71,0xEF,0xC6,0x24,0x4B,0x8B,0xD7,0xC9,0xFD,0xEF,0x6B,0xDB,0x91,0x1D,0x1F,0x66,0x4E,0x85,0xD8,0x85,0x00,0x2B,0x6A,0xBD,0x61,0xCC,0x0A,0x64,0x28,0x9D,0x20,0x40,0xDE,0x14,0x43,0x2E,0xB8,0x3A,0x8C,0x0F,0xCB,0x17,0x06,0xB5,0xD4,0xA7,0xA9,0xFA,0x5E,0xF9,0x42,0x84,0x27,0x84,0x0D,0x9A,0x11,0x09,0xD6,0xD2,0xF9,0xFB,0x4A,0xA7,0xE0,0xFD,0x88,0x32,0x60,0xB2,0x2E,0xA5,0xEC,0xEF,0x2B,0x33,0x42,0xBC,0xD2,0xB3,0xED,0xAA,0xB5,0xA2,0x6D,0x1F,0xF7,0x8E,0x4F,0x2A,0x1B,0x26,0xA5,0x96,0xB9,0xF5,0xA2,0x22,0x63,0x24,0xD9,0xA4,0x1A,0x82,0xE1,0xCC,0x5F,0xE2,0x40,0x01,0x44,0x4E,0xDC,0x93,0x07,0x27,0x56,0x0D,0x6E,0x08,0xF2,0xFD,0x52,0x95,0x4D,0xB3,0xEC,0x06,0x7D,0x73,0x50,0xEA,0x98,0x9C,0x5D,0x17,0xBC,0x01,0x4D,0x5C,0x6C,0x95,0xA4,0x67,0x0B,0xDB,0x28,0x72,0x49,0x85,0xBD,0x51,0x8F,0xFE,0x95,0xCD,0xC8,0xE2,0xEA,0x0F,0xBA,0xD1,0x31,0x66,0x91,0xF0,0xA7,0x62,0xCE,0xB8,0x76,0xA2,0xC5,0x02,0x23,0x18,0x65,0xE2,0xA2,0x25,0x69,0xAD,0x9E,0x59,0x9D,0xB8,0x6A,0x2D,0x44,0x2B,0x5D,0x31,0xE9,0x86,0x1A,0xE9,0x3C,0xB4,0x7D,0x33,0x52,0x95,0xE9,0x7A,0x2E,0xB5,0xCE,0x6F,0x18,0x9B,0x2C,0x74,0x1D,0xE6,0xD8,0x91,0xE7,0x51,0x44,0x3B,0x24,0x00,0x35,0x15,0x13,0xD5,0x33,0xDC,0x46,0xD1,0x99,0x31,0x6C,0xD1,0x66,0x4C,0x2E,0x00,0x15,0x89,0x22,0xC9,0x21,0x5A,0xE8,0x83,0x52,0x31,0xAB,0xED,0xEC,0x42,0x66,0xD1,0x5C,0xD5,0x18,0xC4,0x93,0xF5,0xA1,0x8A,0xF1,0xE9,0x82,0xE9,0x04,0xB5,0x7A,0x87,0xBD,0xC3,0x63,0xF8,0x8F,0xA2,0x41,0x2F,0x77,0x2E,0x61,0xDE,0x02,0xCF,0xCB,0x25,0x9F,0xEA,0x7D,0x92,0xA2,0x34,0x56,0x89,0x45,0xFD,0x48,0xCA,0x6E,0x98,0xF4,0xBB,0x15,0x85,0xA5,0xC0,0xA5,0x9B,0x3B,0xA2,0xC2,0x5B,0x9A,0x42,0x3C,0xF7,0xFF,0xE9,0xF0,0xAA,0xFA,0x7F,0xEF,0xED,0x92,0x29,0xBE,0x69,0x4F,0x6F,0x6C,0x97,0x70,0xDF,0xBE,0xD1,0x2B,0x46,0xBD,0x23,0xFA,0x19,0x90,0xD0,0x83,0x45,0x55,0x00,0xAB,0xAB,0xC2,0x9E,0x47,0x1A,0xB3,0x81,0x0D,0x6C,0xC7,0x75,0x3B,0xAE,0xBF,0xAA,0xEE,0x44,0xCA,0x3D,0x79,0xCD,0x4F,0xAB,0x5D,0x7E,0x53,0x69,0x23,0xC8,0x5C,0xFF,0x13,0xD2,0x7E,0xDB,0x01,0x57,0x1A,0x1A,0x9B,0x15,0x8A,0x0D,0xFC,0x71,0xBB,0x89,0x6A,0xB9,0x12,0xEF,0x04,0x4B,0x17,0x73,0xE1,0xCA,0x21,0xE6,0x6C,0x83,0x45,0xD5,0xC2,0x0F,0x1D,0xFE,0x1B,0x4D,0x80,0x5D,0x44,0x3B,0xF8,0x8D,0x96,0xDC,0x95,0x0B,0x13,0x99,0xBC,0x8E,0x26,0xCC,0x74,0x5F,0xCF,0x76,0x49,0x97,0xF7,0x0E,0xC5,0xB9,0x5A,0xED,0xD6,0x15,0xED,0x7E,0x36,0x32,0xD4,0x83,0x1A,0x64,0xF4,0x38,0x69,0x4F,0x03,0x7C,0x5D,0x43,0x99,0x43,0xF1,0xEF,0x90,0x6F,0x88,0x6E,0xBE,0xF6,0x67,0x05,0x40,0x78,0x51,0xF7,0x24,0xAC,0x31,0x75,0xF1,0x94,0x75,0xFC,0x31,0xD9,0xEE,0xD3,0xF5,0x1A,0xE9,0xA6,0xA4,0x84,0xAA,0x5D,0x35,0xAE,0xBE,0xCA,0x8B,0x2E,0xB6,0x49,0xC1,0xAF,0x19,0xAC,0x4F,0x3D,0x2E,0xCF,0x6E,0x1D,0x69,0x9F,0xA0,0x32,0x73,0x24,0xBB,0x72,0xC5,0xDE,0xA7,0xE4,0x4C,0xB3,0x67,0x63,0xE6,0xC5,0x90,0xC4,0xED,0x33,0x83,0x19,0xC6,0xCC,0x45,0xC9,0x07,0x78,0xF0,0xEF,0xAD,0xC1,0xA9,0xF2,0xC7,0x82,0x92,0xC1,0x65,0xA2,0x15,0x6E,0x6B,0xAD,0x97,0xAC,0xC2,0x05,0xB2,0x9C,0x8B,0x94,0x40,0x95,0x47,0x65,0x59,0x86,0x59,0xDF,0xA3,0x29,0x75,0x76,0x67,0x8E,0xA0,0xED,0xA5,0xEE,0x8A,0x80,0xA3,0x0A,0xBF,0x3A,0xEE,0x2E,0x6D,0x1A,0xF6,0x4F,0x7B,0x15,0x53,0x9A,0xAE,0x1F,0x96,0xC7,0x15,0x9A,0x80,0xFD,0x22,0xA2,0x98,0x48,0x6C,0x5D,0x2A,0x77,0x9E,0x98,0x73,0x2B,0xAF,0xD4,0x2A,0xDD,0xA5,0x31,0x55,0x1E,0x8E,0x39,0x9B,0xF7,0x7B,0xCA,0x4C,0x5B,0xBA,0xFF,0x46,0xF0,0x15,0xAC,0x37,0xE9,0x0F,0x72,0x43,0xCD,0xC4,0xEA,0x34,0x9A,0x29,0x72,0xFD,0x3A,0x9B,0x80,0xA5,0x38,0xCC,0x1C,0xCB,0xC2,0xA5,0xBB,0x9C,0x74,0xCD,0x9B,0x63,0x11,0x1F,0x8D,0x8E,0xA4,0x1B,0x58,0x46,0x47,0xE9,0xBD,0x36,0x23,0x7A,0x17,0x8B,0x7C,0x9F,0x0B,0xFF,0x91,0x45,0x33,0x5D,0x14,0x86,0x63,0x9D,0xDE,0x8D,0xA1,0x67,0x6F,0x7B,0x19,0x59,0xCE,0x52,0x73,0xAC,0xB1,0xEE,0xFA,0x53,0x3F,0x77,0x8D,0x5D,0xE7,0xDB,0xDE,0x10,0xA9,0x63,0x3D,0xF3,0x93,0x80,0xCE,0xA8,0xD2,0x53,0xBA,0x71,0xF7,0xCE,0x83,0xFB,0xF7,0x4F,0x7F,0xBC,0xEB,0x4D,0xC2,0x85,0xF8,0xEF,0x2F,0xFC,0x17,0x94,0xD7,0xEF,0x06,0xA7,0x27,0xD0,0xD0,0x62,0x42,0x1C,0x6F,0x1A,0x8E,0x8E,0x18,0xD3,0x9C,0x20,0x47,0x20,0x49,0x81,0x6C,0x22,0xA1,0xAB,0xC4,0x8B,0x87,0x84,0x90,0xA3,0x26,0x28,0x50,0x0C,0x61,0xC3,0x78,0xBB,0xC0,0x3A,0x2D,0x9D,0x25,0xB6,0x89,0x7F,0x95,0xD7,0x80,0x29,0x25,0xB2,0x9E,0x18,0x85,0xAD,0x22,0x86,0x40,0xC6,0xC8,0xE9,0xEF,0x21,0x05,0x63,0x12,0xF9,0x84,0xF5,0xA5,0xED,0x79,0x3E,0xB5,0x1D,0xA0,0x39,0xA6,0x89,0x48,0x9C,0x2C,0x66,0x93,0x47,0x22,0xA1,0xD4,0x8D,0xB7,0x98,0x85,0x2B,0xA0,0xAC,0x34,0xEB,0x1A,0x17,0x91,0x41,0x33,0xF3,0xEB,0xB1,0x88,0x62,0xC7,0xB4,0x83,0x98,0xDB,0x54,0x08,0xC4,0xD8,0xF9,0x0B,0xE6,0x60,0x4B,0xE4,0x46,0x60,0xDA,0x7E,0x4F,0x37,0x7E,0xFD,0xFD,0xD9,0xA3,0x16,0x24,0xA2,0xDE,0x55,0x7F,0xD0,0xEB,0xB5,0x47,0x47,0x7C,0x48,0x63,0x5E,0x0F,0x74,0xE3,0x92,0xB1,0x1A,0x9C,0x01,0xAB,0xDE,0xE0,0x64,0x73,0x56,0x67,0xBA,0xC1,0x38,0x01,0x93,0xAB,0xFB,0xA7,0x67,0x9B,0x33,0xBA,0x0F,0x32,0xBD,0x03,0x4E,0x67,0xA0,0xDD,0xE9,0x36,0xCA,0x9D,0xEA,0x06,0xE5,0x03,0x51,0x71,0x75,0x72,0xB6,0x05,0x9F,0x7B,0xBA,0x28,0x89,0xD4,0x65,0xE3,0x23,0xDD,0x38,0xFF,0xE9,0x69,0xEB,0x04,0x64,0x1C,0x3C,0x38,0xDD,0x9C,0xF7,0x89,0x6E,0xFC,0x4C,0x85,0x3C,0x1E,0x00,0xA3,0x93,0x2D,0x84,0x3C,0xD6,0x8D,0xE7,0x8C,0x13,0x70,0xB9,0xEA,0xDF,0xDF,0x42,0x24,0x70,0xAF,0x9F,0x19,0x27,0xF0,0x2F,0xEA,0x5E,0x35,0x39,0x41,0xBE,0x64,0xA6,0x29,0x89,0xD3,0xF5,0xEC,0x93,0xB9,0x5C,0x16,0xC6,0x7F,0x47,0x50,0x3A,0xC8,0x75,0xE3,0x20,0x16,0x74,0xA0,0x12,0x3F,0xA8,0x17,0xBF,0x92,0x24,0xC9,0xCF,0x72,0xBA,0xD1,0xEF,0x55,0x68,0xC0,0x68,0xE5,0x2C,0xC8,0x88,0x33,0x0A,0xE8,0xB4,0x93,0x60,0x31,0x4C,0x6F,0xFD,0x00,0x1F,0x3D,0xD6,0xA5,0xB8,0xDE,0x28,0x45,0x28,0xA4,0x45,0x57,0xBA,0x71,0x7A,0x5C,0x65,0xEF,0x2D,0xE0,0x98,0xB0,0x36,0xC5,0xC3,0x61,0xD8,0x18,0x91,0x94,0x54,0x37,0x1E,0x27,0xC7,0xDB,0xE0,0xD2,0x19,0x6C,0x81,0x8B,0x24,0x0E,0x87,0xA6,0x33,0x10,0xD0,0x0C,0xF4,0x34,0x22,0x3E,0x27,0x30,0x55,0xD2,0x6E,0x83,0x0B,0x2D,0xE2,0x01,0x0A,0x49,0x63,0x54,0x62,0x42,0x48,0x6B,0xE2,0x68,0x6F,0x88,0x24,0xA2,0x7C,0x03,0x78,0x84,0x88,0x44,0x01,0xBB,0x21,0xAE,0x31,0x22,0x29,0x29,0xD4,0xC3,0xE4,0x78,0x6F,0xA8,0x48,0xE2,0x7C,0x0B,0xB8,0x2C,0xB0,0xE9,0x20,0xF7,0x3D,0xB6,0x6D,0x28,0x59,0xCD,0xB1,0xC9,0x90,0x03,0x3E,0xFC,0xBB,0x76,0xC1,0xBE,0x37,0xEE,0x11,0x73,0xEC,0x3E,0x57,0xA3,0xD8,0x53,0xF7,0x2D,0xAF,0xFC,0x44,0xCE,0x0D,0x3B,0x84,0x3E,0x30,0xC1,0x53,0xB6,0x52,0xDE,0x98,0xC7,0x40,0x37,0x9E,0x05,0xE8,0x9A,0x3D,0x5B,0xB0,0x4D,0xD3,0xF3,0x16,0x5B,0xDA,0x2F,0xB0,0x14,0xDC,0xA6,0x03,0x7B,0x16,0x60,0x58,0x26,0x6E,0xC5,0xE5,0x1E,0x14,0x33,0x38,0xD8,0x8E,0x09,0x34,0xAC,0x97,0x78,0xE1,0xA0,0xAF,0xA1,0xE1,0x42,0xAB,0x49,0xE3,0xB0,0x00,0x1A,0xDD,0x78,0xF4,0xDB,0xE3,0xC6,0x49,0x8A,0xEF,0x37,0xD7,0xF1,0x70,0x9E,0x9D,0x84,0x80,0xFA,0xDA,0x62,0x53,0x1D,0x39,0x75,0x17,0x9C,0x0A,0xBD,0x62,0x01,0xD9,0xF6,0x9C,0x2E,0xA9,0x59,0x4F,0xC7,0x2F,0x97,0xC1,0x40,0x88,0xF7,0x53,0xE4,0x34,0xAF,0x2B,0x31,0x21,0x43,0x4A,0x7B,0x06,0x47,0xBB,0x82,0x8B,0x4F,0xBB,0x37,0xCC,0x84,0xD6,0xFB,0x06,0x0E,0x04,0x99,0xFB,0x56,0xF3,0xED,0x08,0x41,0xA7,0x1B,0x80,0xDA,0x4B,0x38,0x68,0x5C,0x65,0x62,0x06,0x5F,0xB8,0xBC,0x3C,0x8A,0x88,0xBF,0x4D,0x65,0xB9,0x8C,0x3C,0xEF,0x7A,0x9B,0xB2,0x72,0xEE,0xFA,0x91,0xB5,0x39,0x07,0xA8,0x29,0xAF,0x6D,0xDB,0x31,0x37,0xAF,0x4A,0x50,0x51,0x9E,0xFB,0xF3,0x9A,0xF4,0x5F,0x38,0x8B,0x63,0xB3,0x79,0x82,0xC0,0x26,0xA0,0x78,0x71,0xAE,0x5D,0x5E,0xBC,0xBA,0x7C,0xFD,0x76,0x37,0xD9,0x01,0xE6,0xDC,0x53,0x62,0xA0,0xDA,0xEE,0x3B,0x27,0x80,0x10,0x83,0x4D,0x70,0x1A,0x70,0xA0,0x9E,0x5C,0xBE,0xD9,0x15,0x4A,0x83,0xFD,0xC1,0x34,0xF8,0x1A,0x70,0x7A,0xEF,0xE2,0x25,0x76,0x37,0xC0,0x8A,0x13,0x52,0xBC,0xB4,0x17,0xF4,0x68,0x6F,0x0B,0xB9,0x44,0x94,0x6F,0x60,0x19,0x07,0x5E,0xF1,0x9E,0x09,0xBD,0x49,0xF0,0x70,0x4A,0xDD,0xB8,0xB8,0x5A,0xF8,0x61,0x14,0xD4,0x2C,0xA8,0x6A,0x44,0xB6,0xD9,0x19,0x4C,0x45,0xE1,0x88,0xC4,0x5B,0x83,0x74,0x67,0x3F,0xC1,0x64,0xD0,0x3B,0xF9,0xAC,0xA8,0x50,0xE6,0x5F,0x12,0x98,0xE9,0x06,0x75,0x67,0x4A,0xEB,0xCE,0xB3,0xF3,0xDD,0xA4,0xB2,0xE9,0xDE,0x0A,0xCE,0x74,0xAF,0x05,0x47,0xE3,0x3F,0x8A,0x26,0x30,0x6D,0xB8,0x88,0x10,0x84,0xB0,0x76,0xDE,0x64,0x01,0x21,0x6F,0xAA,0x5F,0x6D,0x13,0x3A,0xB1,0x18,0xD9,0xC8,0x39,0x4E,0xE3,0xE6,0xDE,0x67,0x8D,0x9A,0xE3,0x4A,0x69,0xB7,0x09,0x1A,0xAA,0x89,0x89,0x1D,0x97,0x3E,0xC1,0xD4,0x14,0x10,0x89,0x96,0x63,0xA2,0x9D,0xF3,0x6F,0xDB,0x60,0x33,0xD8,0x06,0x1B,0x59,0xA2,0x2C,0x3C,0xA7,0x5F,0xA8,0xD2,0xF4,0x07,0x67,0x5F,0x12,0x9E,0xC9,0xA2,0x79,0x4E,0x03,0x1A,0xDD,0x78,0xFC,0x66,0x37,0x39,0x8D,0x4E,0x56,0x33,0xA7,0x6D,0x95,0xC1,0x98,0x52,0xFB,0x6E,0xC5,0x56,0x1B,0xA0,0xB1,0xA2,0x82,0xFF,0xB6,0x23,0x34,0x56,0xF5,0xD1,0xF8,0xCC,0x15,0x66,0xF5,0x35,0xE0,0x13,0xA0,0xD5,0xFB,0xE9,0x1C,0x35,0xC6,0x48,0xD0,0xE9,0xC6,0x5B,0xB4,0xD2,0x9E,0xBD,0x7C,0xB4,0x13,0xAC,0xE2,0x49,0xF7,0x83,0x57,0xA2,0xF2,0xBE,0x31,0x73,0xB1,0xD7,0x3C,0xA8,0x28,0x91,0x6E,0xBC,0xC0,0x5E,0xA8,0x9D,0xFB,0x81,0x78,0xDB,0xCC,0x4E,0x50,0x63,0x33,0xEF,0x07,0x32,0xAE,0xF4,0xBE,0xF1,0x9A,0xCD,0x9D,0x20,0xF0,0x83,0xC6,0x90,0x09,0x3A,0xDD,0x78,0xDE,0x79,0xC9,0x8E,0x76,0x02,0x57,0x3C,0xEB,0x7E,0x10,0x4B,0x74,0xDE,0x37,0x68,0x4B,0xDB,0x75,0x16,0x8D,0x21,0x63,0x54,0xBA,0xF1,0xAE,0xF3,0x14,0xFE,0xDD,0x09,0x5C,0x7C,0xC6,0xFD,0x80,0x25,0xB4,0xDD,0x37,0x54,0x96,0xB9,0x6A,0x0C,0x14,0xD0,0xE8,0xC6,0x93,0xF3,0xDF,0xB4,0xD6,0x13,0x7F,0xE5,0xD1,0x1B,0xFF,0xB4,0x8B,0x57,0xED,0x9D,0x20,0x46,0xA7,0xDE,0x0F,0x5E,0x4C,0xE9,0x7D,0xA3,0xC5,0xEE,0x3E,0x9E,0xA0,0xE6,0xE9,0x30,0x26,0xA4,0xF7,0xBE,0xC0,0x91,0xF6,0x18,0xED,0x26,0x21,0x26,0xF3,0xEE,0xA2,0x69,0x4F,0x95,0xDC,0x37,0x4E,0x2E,0xBD,0xE1,0xAA,0x79,0x9B,0x41,0xA9,0x26,0x04,0xAC,0xF0,0x82,0x1E,0x69,0x8F,0xD9,0x1B,0x0A,0x76,0xD3,0x67,0xC4,0x53,0xEF,0x02,0xA7,0x54,0xCF,0xFD,0xE3,0xE4,0xE1,0x8E,0x85,0x09,0xBB,0xC3,0xA5,0x01,0x4E,0x1E,0x8E,0x89,0x5E,0xC0,0xB1,0xF6,0x84,0x7D,0xD9,0x11,0x50,0xC9,0xDC,0xBB,0x81,0x2A,0x55,0x75,0x17,0x60,0xC5,0x0F,0x1A,0xB0,0xB5,0x3E,0x7F,0xA3,0x53,0x15,0x30,0xE2,0x3D,0x2F,0x6C,0x3F,0x06,0x93,0x4E,0x48,0x1C,0xD7,0xD5,0x8D,0x67,0x98,0x68,0x97,0xF4,0x70,0x74,0xC4,0x07,0xD4,0xE7,0x22,0xEE,0xE2,0xA7,0xEF,0x52,0x43,0x73,0xDD,0xB8,0xA4,0xEF,0xBA,0x02,0x5E,0xF4,0x5B,0x73,0x66,0x36,0x32,0xF1,0x7B,0xEC,0x05,0x3E,0x08,0x95,0x00,0x24,0x5E,0x39,0xA2,0x6B,0xF1,0x91,0x74,0xCE,0xB8,0x60,0x83,0xB5,0xA7,0x88,0xFE,0x3C,0x5B,0x35,0x1D,0xFD,0x69,0xD5,0x2C,0xFE,0x05,0x76,0x74,0xE4,0x21,0x85,0xB9,0x0B,0x50,0x18,0xF1,0x97,0xA4,0x15,0xB0,0x4A,0x9E,0x90,0x60,0x96,0x48,0x9F,0x36,0x4A,0xD4,0xCA,0x3F,0x85,0x24,0x76,0x61,0xEB,0x85,0x26,0x7B,0x9E,0x48,0x14,0x39,0x7A,0x98,0x98,0xFF,0x3F,0xFF,0xAE,0xF2,0x19,0xFA,0x0A,0xBB,0x54,0x30,0x5D,0x0B,0x03,0x73,0xAC,0x17,0x3D,0x6F,0x51,0xA0,0xF9,0x91,0x4A,0xF5,0xDC,0x60,0x85,0xAD,0x47,0xA1,0x19,0x38,0x0B,0x62,0xDC,0xB2,0x7C,0x33,0x9A,0x63,0x8F,0x74,0x91,0x65,0x5D,0x2C,0xE1,0xE0,0x85,0x13,0x12,0x0C,0x56,0x68,0x1D,0x3C,0x79,0xFD,0xF2,0x9C,0x3F,0x77,0xF2,0xC2,0x47,0x16,0xB6,0x0E,0x0E,0x35,0x3B,0xF2,0xB8,0x9B,0xB7,0x30,0x1D,0xCB,0x5F,0x1F,0xB8,0x44,0x81,0x36,0x41,0x21,0x7E,0xEE,0x87,0x44,0x1B,0x6B,0x09,0x47,0xD7,0x37,0xD9,0x3D,0x89,0x5D,0x3F,0x70,0xA6,0x8E,0x27,0x46,0x72,0x65,0x7F,0x0D,0x5C,0x18,0x9A,0x50,0xFD,0xA0,0x1D,0x0C,0xCF,0xFA,0x07,0xF4,0x11,0x21,0x80,0x01,0x4E,0x00,0x04,0x18,0x06,0x40,0x70,0x8F,0x0D,0xF1,0x8C,0x10,0x76,0xBB,0xCC,0xE4,0x54,0x40,0x2A,0x6D,0xEB,0x80,0xE3,0x74,0x40,0x9F,0x97,0xBB,0x49,0x28,0xC3,0x99,0xBF,0x2A,0xA3,0x0C,0xF0,0xDC,0x5F,0xE2,0x1C,0x71,0x42,0x2D,0xBC,0xB9,0x72,0xEA,0xD8,0xEB,0x0F,0xDA,0xF1,0x80,0xE4,0x75,0x3C,0x63,0x8D,0x04,0x11,0xCE,0xB2,0xC5,0x5E,0x15,0xD7,0x58,0xAC,0x52,0xC6,0x36,0x72,0xC3,0x1C,0xE7,0x68,0x61,0x21,0x82,0xDF,0xD1,0x2D,0x5B,0x18,0xD0,0xC2,0xEE,0x21,0xDF,0xBF,0x3D,0x14,0x57,0xDE,0x02,0x5F,0x82,0xDB,0xE9,0xAC,0xF2,0x69,0xA0,0xC8,0x7E,0x1D,0x6B,0x5E,0x04,0x21,0xFC,0x90,0xA9,0xA0,0x0D,0x33,0x57,0x19,0xB5,0x0B,0xD9,0x49,0xBC,0x7A,0x98,0xCD,0xC9,0x4E,0x3A,0x36,0x9D,0xB8,0xCB,0x5E,0x84,0x3C,0x06,0x1E,0x07,0x71,0x66,0x3F,0x48,0xDF,0x2F,0x29,0x13,0x31,0x3B,0x74,0x45,0x73,0x2B,0xAE,0x2F,0xC5,0x85,0xDB,0xB7,0x97,0x09,0x5F,0x4D,0x1A,0x06,0x97,0xD2,0x0B,0x37,0x70,0x41,0x7A,0x88,0x6F,0x9D,0x77,0x8E,0x47,0xCC,0x5C,0xE2,0x70,0x2B,0x91,0x3C,0x63,0x81,0xBB,0x77,0xB3,0xDC,0x6E,0x8F,0x05,0x55,0xAA,0x09,0x1F,0x0F,0x91,0x01,0x91,0x07,0x6A,0x8B,0x47,0x3B,0x85,0x48,0x8E,0xDD,0xBA,0x9D,0x31,0x7C,0x22,0xA3,0x4D,0x4D,0xE4,0x58,0xCC,0x40,0xEC,0xC6,0x86,0x76,0xFA,0xE8,0x1B,0x97,0xEF,0x21,0xF3,0xFA,0x16,0x16,0x3F,0x79,0xB6,0xC1,0xFE,0xD4,0x99,0xD3,0x13,0x62,0x7C,0x3A,0x95,0xCC,0x71,0x9A,0xE1,0x48,0x15,0xCB,0xC9,0x4D,0x3F,0x8C,0x1F,0xDD,0xFC,0x17,0x3F,0x40,0xC8,0x8F,0x9A,0xB2,0xC9,0x81,0x0D,0xFD,0x81,0x22,0x3D,0x9F,0x33,0x75,0x32,0xB0,0x80,0x09,0x9B,0x60,0x9D,0x49,0xA9,0xE4,0xF1,0xDD,0x5F,0x0A,0x83,0x30,0x76,0xAB,0x09,0x35,0x05,0x9B,0x15,0x0E,0xCB,0x58,0xB1,0x9A,0x15,0x60,0xD3,0x9F,0x7A,0xF4,0xA1,0x2E,0x05,0x43,0x1E,0x88,0x2D,0x5E,0xD7,0x78,0x9B,0x4A,0x99,0x8B,0x18,0xCB,0x9E,0xBF,0x25,0x0B,0x7F,0x13,0x87,0x5D,0x92,0x02,0x65,0x3F,0xA0,0xFE,0x1F,0x5B,0x9A,0x86,0x48,0xEA,0x68,0xE2,0x69,0xFD,0x38,0x3E,0x52,0x38,0x4C,0xC8,0x7D,0x52,0xA4,0x0C,0x73,0xA2,0xCA,0x21,0x02,0x72,0xF7,0x35,0xF9,0xF9,0xFB,0x09,0xA4,0xD0,0x8F,0x19,0x3E,0xEC,0x97,0x96,0x84,0x09,0x3F,0xC7,0xEF,0x5D,0xEA,0xF8,0x1E,0x56,0x73,0x97,0x83,0x44,0xC5,0x93,0x97,0xF0,0x3C,0xD3,0x68,0x32,0x77,0x88,0x82,0xE1,0x01,0xA4,0x6F,0x15,0x2F,0xD1,0xD4,0xA5,0x04,0x01,0x26,0x51,0xE0,0xC9,0x51,0xC8,0x33,0xD9,0xDF,0x11,0x0E,0xAE,0x81,0xD1,0x87,0xEF,0x3E,0xC5,0x75,0xE1,0xE6,0x88,0x3D,0x6F,0xE0,0xBB,0x0F,0xA1,0x72,0x8C,0xBF,0xFB,0xC4,0xA0,0xBE,0xB9,0x0B,0x53,0xC2,0x17,0x36,0xF1,0xCD,0x07,0xCE,0xC2,0xA6,0x6F,0x8F,0x6D,0x31,0x16,0x31,0x6E,0x5D,0x32,0xC3,0x5E,0x2B,0xC0,0xE1,0x02,0xD8,0xE3,0x34,0x01,0xC6,0x33,0xFA,0x2E,0x86,0x12,0x35,0x6D,0x7D,0x08,0x30,0xD0,0x81,0x00,0xC4,0xD7,0xBE,0xFB,0xC4,0x58,0xDC,0x68,0x36,0x64,0x81,0x70,0x86,0xAD,0x43,0xA8,0x57,0x88,0xD0,0xC7,0x6A,0xBF,0xFB,0x14,0xB3,0xEA,0xF2,0x53,0x37,0x1F,0x12,0x0F,0x49,0x8A,0x48,0x5C,0xFB,0xD8,0x85,0x2E,0xE3,0x75,0xC9,0x50,0xF0,0x83,0x47,0xAE,0xDB,0x3A,0xE0,0x4F,0x1F,0x8B,0xDC,0xDE,0x85,0x46,0xF5,0x02,0x81,0xD8,0x72,0x51,0x60,0xF9,0xCA,0xF7,0x4C,0xD7,0x31,0x3F,0xD2,0x84,0xDE,0xCE,0x0A,0xCE,0x33,0x84,0xDB,0xE5,0x6F,0x93,0x79,0xE5,0x5B,0x38,0xE7,0xA6,0x6D,0x2A,0xC6,0xD1,0x11,0x58,0x19,0x59,0x71,0x2A,0xE3,0x18,0xD1,0xD7,0x0E,0x70,0x33,0x65,0x2C,0xCC,0x95,0x11,0xBA,0x70,0x9B,0xA5,0x55,0x3E,0x56,0x39,0x75,0x5B,0x8E,0x9E,0x96,0xD8,0xE2,0xAF,0xD0,0xF7,0x5A,0xED,0x5B,0x89,0x19,0xD6,0x79,0xD0,0x09,0x24,0x06,0x19,0x13,0x15,0x99,0x29,0xBB,0x12,0x38,0x48,0x33,0x49,0x81,0xCD,0xE8,0x47,0xAA,0x84,0xAC,0x0C,0xB2,0x79,0xFF,0x60,0x2E,0xF3,0xE7,0x21,0x2F,0x9D,0x52,0x46,0x6A,0x4B,0xE6,0xE2,0xFE,0x47,0xDF,0xBB,0x2F,0xB7,0x2F,0xD0,0x93,0x5F,0xB8,0x98,0x1E,0x3E,0xBE,0xFE,0x09,0x4A,0x3E,0x6F,0x5C,0x98,0x2C,0x29,0xC1,0x79,0xD2,0x34,0x56,0x52,0xA6,0x0D,0xA6,0xC4,0x83,0x35,0xFD,0x3C,0xDF,0x94,0x71,0x48,0xD6,0x07,0x19,0x52,0xCA,0xB5,0x9A,0x36,0xB3,0x2A,0x90,0xE8,0xE5,0x5C,0x57,0x46,0x2F,0x2D,0x04,0x24,0x6A,0xE6,0xC8,0xD5,0xC4,0x72,0x4B,0x7C,0x20,0x19,0x3B,0x24,0xFE,0x82,0xAF,0x4C,0x72,0x4E,0xBE,0x72,0x3C,0xCB,0x5F,0x75,0xE9,0xF5,0x96,0x28,0xAD,0xB2,0xA2,0x5D,0xC7,0x03,0x03,0x3E,0xFF,0xE5,0xE5,0x0B,0x9A,0x72,0xE4,0x15,0xCE,0x41,0xB6,0x2F,0x62,0x2F,0xFA,0x55,0xCE,0x40,0x61,0xEB,0x42,0xAB,0xCD,0x53,0x4D,0xD2,0x8E,0xD2,0x48,0xA0,0x87,0x1F,0xF8,0x9C,0xB4,0xF0,0x64,0x00,0x6E,0x57,0xCA,0xE2,0x2F,0xF2,0xA2,0x40,0x1C,0x3E,0x22,0x04,0xDC,0x55,0xE3,0x8E,0x1C,0xD2,0x1C,0x23,0x56,0x87,0xB7,0x34,0x19,0xFC,0x82,0x90,0x4F,0xCD,0x24,0x62,0x2C,0x2B,0xBC,0x94,0x27,0xD1,0x02,0xE2,0x12,0x3F,0x7C,0x6F,0x4E,0x20,0x35,0x3E,0x01,0xCF,0xEF,0x7A,0xA0,0x41,0xFB,0xA6,0x4C,0x1D,0x6E,0xAE,0x14,0xC8,0xBA,0x42,0xB0,0x24,0xA4,0xE6,0x96,0xB1,0x8F,0x9A,0x9D,0xEC,0xBD,0x17,0x5E,0xDC,0xDA,0x16,0x19,0x76,0xBC,0x6E,0x5A,0xDE,0xDD,0x64,0x18,0xA4,0xE9,0x65,0x4D,0xD8,0x5C,0x03,0x23,0xF9,0x45,0x3C,0x20,0x96,0x5D,0x0E,0x88,0x02,0xD9,0xB3,0xBD,0x5F,0xAE,0x59,0xC8,0x41,0x2E,0x72,0x98,0x46,0xDF,0x3E,0x30,0xA3,0xE5,0x59,0x38,0x41,0x9D,0x32,0xA1,0xCC,0x7F,0xA5,0xF5,0x82,0xCF,0x10,0x4B,0x9B,0xEF,0x51,0xB3,0xB5,0xE1,0x3C,0x02,0x2B,0xCD,0x63,0x9F,0xE4,0xE7,0x68,0xC3,0x96,0x04,0x0F,0x34,0x70,0x65,0x41,0x0D,0x97,0xA5,0x4C,0x20,0xBA,0xBD,0x0A,0x02,0xE9,0x56,0x26,0x89,0x56,0xEA,0x22,0x4B,0xD3,0x5F,0xFE,0xE6,0x1B,0xC6,0x02,0xB8,0xAE,0x6B,0xAE,0xC0,0x09,0xC6,0xB5,0x13,0xB7,0xA1,0x44,0xA2,0xAD,0x92,0x9C,0xA6,0xA0,0x2D,0x5E,0x6F,0x89,0x73,0xDE,0x54,0xD4,0x0A,0xAF,0xB7,0xC1,0x37,0x92,0x83,0xC4,0x37,0x35,0xA6,0x26,0xC4,0xE5,0xF6,0xC6,0xB2,0xBD,0xE3,0xE5,0x40,0x05,0x85,0x7C,0xEF,0x25,0x37,0x17,0xAE,0x69,0x2E,0x2C,0xCC,0x45,0x09,0xD2,0x0E,0xB4,0x7A,0x6D,0x92,0xF8,0xFF,0x6F,0x8F,0x53,0xCD,0x56,0x93,0x52,0x39,0x45,0xEF,0x2F,0xA9,0x57,0x4E,0x90,0x79,0x40,0x83,0xAB,0xB5,0x9A,0xD4,0x53,0x2B,0x5E,0x3B,0x50,0x82,0x54,0x2D,0xF5,0x0A,0x23,0x56,0x85,0xEF,0x8F,0xD2,0x36,0x86,0xFE,0x3F,0x14,0x92,0xD7,0x45,0x24,0xC2,0xF2,0x1D,0x46,0x98,0xB6,0x97,0x9C,0x4A,0x96,0x1F,0x99,0xB3,0x09,0x69,0x69,0xA5,0x8D,0x07,0xF1,0x4A,0x99,0x7C,0xAD,0xA5,0x5F,0x32,0x3A,0xF5,0xF5,0x94,0x01,0x6F,0xD2,0x0D,0xED,0x5E,0x7E,0x19,0xCB,0xDB,0x25,0xAE,0x46,0xAE,0x49,0x92,0x07,0x24,0x4A,0x65,0xC6,0x24,0x3E,0xCD,0xE9,0x8B,0xC4,0xAC,0x14,0x05,0xB9,0x38,0x20,0x2D,0xFD,0x8D,0x8B,0xE9,0x12,0x43,0x3C,0x15,0x73,0xFE,0xD3,0x53,0xCD,0x0F,0x34,0xFE,0xA2,0xB9,0x20,0x79,0xC7,0x87,0x26,0xDE,0xC2,0xC4,0x16,0x72,0x34,0x6D,0x90,0x99,0x13,0x42,0x5F,0x4B,0x9F,0x80,0xC5,0xB7,0xF5,0xE4,0x45,0x4B,0x95,0xEA,0xF1,0x46,0xF6,0xC7,0x44,0x91,0x9C,0x39,0x39,0x4D,0x6A,0xCB,0xDB,0x42,0xC7,0xB5,0xDC,0x51,0xB6,0x74,0x6C,0x60,0xC2,0xE4,0xF2,0x57,0x6B,0x45,0xB5,0x02,0x95,0x86,0x4C,0xC8,0x52,0x5B,0xA6,0xBA,0xAE,0x59,0x53,0xB5,0x3E,0x2F,0x41,0x94,0x6E,0x53,0x29,0x13,0x73,0x31,0x2A,0xDC,0xE2,0xBC,0x16,0xF2,0xCF,0xE8,0x28,0xDE,0x0C,0xE5,0xDF,0xF8,0x2B,0x84,0x46,0x47,0xFC,0x7F,0xE6,0xF5,0x5F,0x0A,0x8A,0x29,0x71,0xE4,0x6B,0x00,0x00

复制到下面的花括号中间,记得修改上方的index_ov2640_html_gz_len的大小。

#define index_ov2640_html_gz_len 4327
const uint8_t index_ov2640_html_gz[] = {};

(2) 修改app_httpd.cpp文件

文件最上面增加一个静态全局变量

static bool linedetect = 0;

cmd_handler增加一个按钮控制命令

    else if(!strcmp(variable, "linedetect")) {linedetect = val;Serial.printf("linedetect:%d", linedetect);}

status_handler函数增加status页面的打印

p+=sprintf(p, "\"linedetect\":%u", linedetect);

网页增加相关的配置就到此结束了,下一步就是对图像数据进行处理。

二、图像数据处理

1.新建结构体

绘图使用的线结构体

typedef struct
{float star_point[2];float end_point[2];
} line_t;

结果输出的线结构体

typedef struct tag_line_list
{float score;line_t *line;int len;
} line_array_t;

2.具体实现

ESP32CAM图像的数据传输格式:image_matrix数据格式为一维数组,实际格式为[B G R]三个一组数据,第一行的列(共image_matrix->w列)排完,再写第N行(共image_matrix->h行)。

由于数据帧的问题,这里选用240*176(HQVGA)这种比较低的分辨率。

stream_handler的人脸识别功能部分被修改为识别左边界的功能。

static esp_err_t stream_handler(httpd_req_t *req){camera_fb_t * fb = NULL;esp_err_t res = ESP_OK;size_t _jpg_buf_len = 0;uint8_t * _jpg_buf = NULL;char * part_buf[64];dl_matrix3du_t *image_matrix = NULL;bool detected = false;int face_id = 0;int64_t fr_start = 0;int64_t fr_ready = 0;int64_t fr_face = 0;int64_t fr_recognize = 0;int64_t fr_encode = 0;static int64_t last_frame = 0;if(!last_frame) {last_frame = esp_timer_get_time();}res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);if(res != ESP_OK){return res;}httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");while(true){detected = false;face_id = 0;fb = esp_camera_fb_get();if (!fb) {Serial.println("Camera capture failed");res = ESP_FAIL;} else {fr_start = esp_timer_get_time();fr_ready = fr_start;fr_face = fr_start;fr_encode = fr_start;fr_recognize = fr_start;if(!linedetect || fb->width > 240){if(fb->format != PIXFORMAT_JPEG){bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);esp_camera_fb_return(fb);fb = NULL;if(!jpeg_converted){Serial.println("JPEG compression failed");res = ESP_FAIL;}} else {_jpg_buf_len = fb->len;_jpg_buf = fb->buf;}} else {image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);
//              Serial.printf("image: w:%d h:%d size:%d %d", fb->width, fb->height, fb->len, sizeof(fb->buf));if (!image_matrix) {Serial.println("dl_matrix3du_alloc failed");res = ESP_FAIL;} else {if(!fmt2rgb888(fb->buf, fb->len, fb->format, image_matrix->item)){Serial.println("fmt2rgb888 failed");res = ESP_FAIL;} else {fr_ready = esp_timer_get_time();line_array_t *lines = NULL;if (linedetect) {lines = recoginLines(image_matrix);}fr_face = esp_timer_get_time();fr_recognize = fr_face;if (lines || fb->format != PIXFORMAT_JPEG) {if (lines) {detected = true;fr_recognize = esp_timer_get_time();draw_lines(image_matrix, lines);free(lines->line);free(lines);}if(!fmt2jpg(image_matrix->item, fb->width*fb->height*3, fb->width, fb->height, PIXFORMAT_RGB888, 90, &_jpg_buf, &_jpg_buf_len)){Serial.println("fmt2jpg failed");res = ESP_FAIL;}esp_camera_fb_return(fb);fb = NULL;} else {_jpg_buf = fb->buf;_jpg_buf_len = fb->len;}fr_encode = esp_timer_get_time();}dl_matrix3du_free(image_matrix);}}}if(res == ESP_OK){res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));}if(res == ESP_OK){size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);}if(res == ESP_OK){res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);}if(fb){esp_camera_fb_return(fb);fb = NULL;_jpg_buf = NULL;} else if(_jpg_buf){free(_jpg_buf);_jpg_buf = NULL;}if(res != ESP_OK){break;}int64_t fr_end = esp_timer_get_time();int64_t ready_time = (fr_ready - fr_start)/1000;int64_t face_time = (fr_face - fr_ready)/1000;int64_t recognize_time = (fr_recognize - fr_face)/1000;int64_t encode_time = (fr_encode - fr_recognize)/1000;int64_t process_time = (fr_encode - fr_start)/1000;int64_t frame_time = fr_end - last_frame;last_frame = fr_end;frame_time /= 1000;uint32_t avg_frame_time = ra_filter_run(&ra_filter, frame_time);Serial.printf("MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps), %u+%u+%u+%u=%u %s%d\n",(uint32_t)(_jpg_buf_len),(uint32_t)frame_time, 1000.0 / (uint32_t)frame_time,avg_frame_time, 1000.0 / avg_frame_time,(uint32_t)ready_time, (uint32_t)face_time, (uint32_t)recognize_time, (uint32_t)encode_time, (uint32_t)process_time,(detected)?"DETECTED ":"", face_id);}last_frame = 0;return res;
}

其中用到的函数

均值滤波函数的阈值

#define LINE_RECOGINE_MEDIAN_THD   80

均值滤波函数

uint8_t median(uint8_t sortArray[], uint8_t len) {uint8_t i,j,temp,flag;for(j=0; j<len-1; j++) {flag = 0;for (i=0; i<len-j; i++) {if (sortArray[j] > sortArray[j+1]) {flag = 1;temp = sortArray[j];sortArray[j] = sortArray[j+1];sortArray[j+1] = temp;}}if (!flag) {break;}}return sortArray[(len-1)/2];
}

识别边界线的函数

//image_matrix数据格式为一维数组,实际格式为[B G R]三个一组数据,第一行的列(共image_matrix->w列)排完,再写第N行(共image_matrix->h行)
static line_array_t* recoginLines(dl_matrix3du_t *image_matrix) {uint16_t i,j,x,y;uint8_t **gray_img = NULL;uint8_t **gray_filter_img = NULL;float sx,sy;line_array_t *line_result = NULL;uint8_t medianArray[9];bool realse_flag = 1;uint16_t line_len[5] = {0};uint8_t k=0;uint8_t line_num = 0;gray_img = (uint8_t**)malloc(sizeof(uint8_t*)*image_matrix->h);if (gray_img){for(j=0;j<image_matrix->h;j++) {gray_img[j] = (uint8_t*)malloc(sizeof(uint8_t)*image_matrix->w);if (!gray_img[j]) {Serial.printf("malloc gray_img[%d] failed",j);goto __FREE_POINTER;}}} else {Serial.println("malloc gray_img failed");goto __FREE_POINTER;}//灰度化图像for (j=0;j<image_matrix->h;j++) {for (i=0; i<image_matrix->w; i++) {gray_img[j][i] = uint8_t(0.114 * image_matrix->item[3*(j*image_matrix->w+i)] + 0.587 * image_matrix->item[3*(j*image_matrix->w+i)+1] + 0.2989 * image_matrix->item[3*(j*image_matrix->w+i)+2]);}}//均值滤波gray_filter_img = (uint8_t**)malloc(sizeof(uint8_t*)*(image_matrix->h-1));if (!gray_filter_img) {Serial.println("malloc gray_filter_img failed");goto __FREE_POINTER;}gray_filter_img[0] = (uint8_t*)malloc(sizeof(uint8_t)*(image_matrix->w-1));memset(gray_filter_img[0], 0, sizeof(uint8_t)*(image_matrix->w-1));if (!gray_filter_img[0]) {Serial.println("malloc gray_filter_img[0] failed");goto __FREE_POINTER;}for (y=1; y<image_matrix->h-1; y++) {gray_filter_img[y] = (uint8_t*)malloc(sizeof(uint8_t)*(image_matrix->w-1));memset(gray_filter_img[y], 0, sizeof(uint8_t)*(image_matrix->w-1));if (!gray_filter_img[y]) {Serial.printf("malloc gray_filter_img[%d] failed",y);goto __FREE_POINTER;}for (x=1; x<image_matrix->w-1; x++) {medianArray[0] = gray_img[y-1][x-1];medianArray[1] = gray_img[y-1][x];medianArray[2] = gray_img[y-1][x+1];medianArray[3] = gray_img[y][x-1];medianArray[4] = gray_img[y][x];medianArray[5] = gray_img[y][x+1];medianArray[6] = gray_img[y+1][x-1];medianArray[7] = gray_img[y+1][x];medianArray[8] = gray_img[y+1][x+1];gray_filter_img[y][x] = median(medianArray,9)> LINE_RECOGINE_MEDIAN_THD ? 255: 0;}}line_result = (line_array_t*)malloc(sizeof(line_array_t));if (line_result) {line_result->len=0;line_result->line = (line_t*)malloc(sizeof(line_t)* image_matrix->h);memset(line_result->line, 0, sizeof(line_t)* image_matrix->h);if (line_result->line) {for(y=1; y<image_matrix->h-1; y++) {for(x=1; x<image_matrix->w-1; x++) {if ((gray_filter_img[y][x-1] == 0) && (gray_filter_img[y][x] == 255)) {if (y==1) {line_result->line[y-1].star_point[0] = x;line_result->line[y-1].star_point[1] = y;line_result->line[y-1].end_point[0] = x;line_result->line[y-1].end_point[1] = y;} else {line_result->line[y-1].star_point[0] = line_result->line[y-2].end_point[0];line_result->line[y-1].star_point[1] = line_result->line[y-2].end_point[1];line_result->line[y-1].end_point[0] = x;line_result->line[y-1].end_point[1] = y;}line_result->len++;break;}}}realse_flag = 0;} else {Serial.println("malloc line_result->line fail");goto __FREE_POINTER;}} else {Serial.println("malloc line_result fail");goto __FREE_POINTER;}__FREE_POINTER://释放内存if (realse_flag) {if (line_result) {if (line_result->line) {free(line_result->line);}free(line_result);line_result = NULL;}}if (gray_filter_img) {for (j=0;j<image_matrix->h-1;j++) {if (gray_filter_img[j]) {free(gray_filter_img[j]);}}free(gray_filter_img);}if (gray_img) {for(j=0;j<image_matrix->h;j++) {if (gray_img[j]) {free(gray_img[j]);}}free(gray_img);}return line_result;
}

这里其实有个地方需要优化,最好不要在一个函数里面频繁malloc和free,但为了适应随时更改的图像分辨率,就直接放到这个函数里面进行malloc了。

增加结果输出函数,在图片里面进行画线

static void draw_lines(dl_matrix3du_t *image_matrix,line_array_t *lines) {int x0, y0, x1, y1, w, h, i, j;float temp = 0.0;uint32_t color = FACE_COLOR_RED;fb_data_t fb;fb.width = image_matrix->w;fb.height = image_matrix->h;fb.data = image_matrix->item;fb.bytes_per_pixel = 3;fb.format = FB_BGR888;for (i = 0; i < lines->len; i++){// rectangle boxx0 = (int)lines->line[i].star_point[0];y0 = (int)lines->line[i].star_point[1];x1 = (int)lines->line[i].end_point[0];y1 = (int)lines->line[i].end_point[1];w = (int)x1 - x0 + 1;h = (int)y1 - y0 + 1;if ((x0>0 && abs(x0) < image_matrix->w) && (y0>0 && abs(y0) < image_matrix->h) && (x1>0 && abs(x1) < image_matrix->w) && (y1>0 && abs(y1) < image_matrix->h)) {if (w > h) {temp = 1.0*h/w;for (j=0; j < w; j++) {fb_gfx_drawFastHLine(&fb, x0+j, y0+int(temp*j), 1, color);fb_gfx_drawFastVLine(&fb, x0+(j+1), y0+int(temp*j), 1, color);}} else {temp = 1.0*w/h;for (j=0; j < h; j++) {fb_gfx_drawFastVLine(&fb, x0+int(temp*j), y0+j, 1, color);fb_gfx_drawFastHLine(&fb, x0+int(temp*j), y0+(j+1), 1, color);}}}}
}

最后附上项目的完整代码地址--ESP32CAM识别图形左边界

3.实验结果

第一步结果:均值滤波的结果

   

第二步结果:实时识别边界线(图像分辨率选择240*176)不过帧率有点低


总结

以上就是我所有对于ESP32CAM的使用,目前只是提取ESP32CAM的图片,进行简单处理,并识别出简单背景图片中物体的左边界。

【ESP32CAM识别图形左边界】(三)识别图像左边界相关推荐

  1. python 识别图形验证码_Python验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...

  2. 图像五值化与基于三值图像的车牌识别(1)

    庆祝2011年新年 张忠义 海口愚佬会教育科技有限公司 全文下载 www.yulaohui.com/color5_2/ 摘 要:      图像五值化是通过公式Y =(R+G)/2,将RGB空间映射到 ...

  3. 基于三值图像的车牌识别测试程序发布

    基于三值图像的车牌识别测试程序正式发布,初始版本是0.9.0.由于还有匹配模板没有完全导入,因此,识别精度还低.但是,目的是演示识别过程.其意义是,1.基于彩色图像直接进行三值化(即彩色二值化)并基于 ...

  4. CNN(卷积神经网络)识别图形验证码(全网最通俗易懂,最全面的讲解)

    这里面大多资料均为网上参阅,参考资料过多未能记住您的文章地址望见谅,如涉及您的文章,本文未声明的即可留言,我会将您的原文地址引入. 一.前言 项目代码:https://github.com/bao17 ...

  5. python代码标识码_代码分享:使用Python和Tesseract来识别图形验证码

    原标题:代码分享:使用Python和Tesseract来识别图形验证码 *本文原创作者:ipenox,本文属FreeBuf原创奖励计划,未经许可禁止转载 各位在企业中做Web漏洞扫描或者渗透测试的朋友 ...

  6. OCR图文识别软件是怎么保存页面图像的

    2019独角兽企业重金招聘Python工程师标准>>> ABBYY FineReader作为一款OCR图文识别软件,可以保存识别的页面图像,包括扫描的文档,当文档非常大时,可以仅选取 ...

  7. Python模拟登录,Python识别图形验证码实现自动登陆

    前言 利用Python识别图形验证码,selenium模块实现自动登陆.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re: numpy模块: pytess ...

  8. python制作文字识别_用Python轻松进行图像文本识别

    用Python轻松进行图像文本识别 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 最近,办公室的同事小李在整理一份报告,很多材料的电子版找不到了,都是纸质版的,纸质版上的 ...

  9. (三)、从零开始搭建人脸识别服务之大规模人脸识别

    人脸识别服务需要包括以下几个功能模块: 1.人脸检测和人脸校正模块 2.人脸特征提取模块 3.人脸特征匹配模块 4.人脸识别结果计算模块 前两篇文章中分别介绍了人脸检测和人脸特征提取,这篇文章简要介绍 ...

最新文章

  1. 05构建之法阅读笔记之三
  2. base64的c语言实现方法
  3. SwiftUI之深入解析高级动画的时间轴TimelineView
  4. jmeter验证WEB页面的href链接请求
  5. 阿里云宣布与Facebook达成合作 让AI开发更简单
  6. 我在外包的日子35:二期上线
  7. 网络协议从入门到底层原理(9)HTTP/1.1的升级改进(HTTP/2、HTTP/3)
  8. swift 获得手机IP(运营商IP和WiFi的IP)
  9. CoType: Joint Extraction of Typed Entities and Relations with Knowledge Bases阅读笔记
  10. 10折交叉验证深入理解
  11. JS弹出窗口方法汇总
  12. springboot+pageoffice实现Word在线编辑
  13. 计算机网络设计大赛总结,大学生海报设计大赛总结
  14. 魔百盒CM201-2,(ys)卡刷固件及教程
  15. 电脑哔哩哔哩播放器调整为html5,谷歌浏览器插件哔哩哔哩(Bilibili)播放器扩展Extension for Bilibili Player关闭弹幕、截图、画中画...
  16. VScode已经设置了默认浏览器依然不成功原因
  17. java实现中国象棋 源代码
  18. matplotlib绘制双坐标轴(双纵轴)
  19. #define s(x) x*x 的计算方法
  20. Java的反射机制?

热门文章

  1. 在Excel中按条件筛选数据并存入新的表
  2. Android 多线程应用
  3. vue项目中加入百度统计
  4. C - Parity Shuffle Sorting
  5. 服务器文档用wps无法打开,wps文件打不开遇到问题该怎么办 wps文件打不开的解决方法...
  6. 几个不错的国外免费虚拟主机 Free host
  7. 加工中心逆变器散热风扇故障_西门子840D车床加工中心231885故障S120维修
  8. Unity的坑——避免用New来创建继承于MonoBehaviour脚本的对象
  9. 安装了windows 2012 遗憾的是不可以使用free launch bar
  10. 产品经理和程序员之间的选择?