0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何制作监控摄像机

454398 来源:wv 2019-09-03 11:30 次阅读

第1步:我们需要什么

物理计算

Arduino Uno(或另一个工作的微控制器

伺服(我使用parralax标准伺服)

Red led

220k电阻

5x电线

Javascript

P5.js

P5 DOM库

P5串行库

P5串行控制(处理串行通信的小程序)

ML5.js

对象

MDF 4mm

底漆喷涂

白色喷漆

浅灰色喷涂油漆

黑色喷漆

黑色太阳镜镜片(或其他)

第2步:进行姿势估计工作

如何制作监控摄像机

首先我们要编写识别人类的草图并在它的鼻子上放一个点。目标是从这一点获取水平X数据并将其发送到Arduino。

让我们开始吧!

在这个项目中,我们需要一些文件或库来使一切正常工作:

p5.js (您可以下载完整的软件包,因为这包括DOM库)

p5 DOM

p5串口(我使用了包中包含的示例中的p5.serialport.js文件) )

ML5.js(您可以将其作为链接包含在内,或者您可以通过这种方式下载整个本地库,这样您就不需要连接互联网以使一切正常工作)

我们拥有所有这些,我们可以将所有内容链接到一个简单的HTML文件中:

接下来是我们的sketch.js文件,其中所有的魔法都发生了!

var serial;

var portName = ‘COM6’; // fill in your serial port name here, you can check the right port in Arduino or P5 serial control

var options = {

baudrate: 19200 //baudrate has to be the same in arduino

};

// this is the message that will be sent to the Arduino:

var oneMessage;

let video;

let poseNet;

let poses = [];

var noseX = []

var ifPerson = true;

//var flipHorizontal = false;

function setup() {

createCanvas(640, 480);

video = createCapture(VIDEO);

video.size(width, height);

frameRate(10);

//--------------------------------------

serial = new p5.SerialPort();

// Get a list the ports available

// You should have a callback defined to see the results. See gotList, below:

serial.list();

// Assuming our Arduino is connected, open the connection to it

serial.open(portName, options);

// When you get a list of serial ports that are available

serial.on(‘list’, gotList);

// When you some data from the serial port

serial.on(‘data’, gotData);

//-----------------------------------------

// Create a new poseNet method with a single detection

poseNet = ml5.poseNet(video, {

flipHorizontal: true,

detectionType: ‘single’

}, modelReady);

// This sets up an event that fills the global variable “poses”

// with an array every time new poses are detected

poseNet.on(‘pose’, function (results) {

poses = results;

if (results.length == 0) {

ifPerson = false;

}

//console.log(‘results: ’ + results);

});

// Hide the video element, and just show the canvas

video.hide();

}

function modelReady() {

select(‘#status’).html(‘Model Loaded’);

}

function draw() {

image(video, 0, 0, width, height);

// We can call both functions to draw all keypoints

drawKeypoints();

if (ifPerson == false) {

serial.write(‘c’);

console.log(“X”);

ifPerson = true;

} else {

oneMessage = map(oneMessage, 1, 640, 65, 115);

serial.write(oneMessage);

console.log(“browser: ” + oneMessage);

}

}

//---------------------------------

// Got the list of ports

function gotList(thelist) {

console.log(“List of Serial Ports:”);

// theList is an array of their names

for (var i = 0; i 《 thelist.length; i++) {

// Display in the console

console.log(i + “ ” + thelist[i]);

}

}

// Called when there is data available from the serial port

function gotData() {

var currentString = serial.readLine();

console.log(currentString);

}

//-------------------------------------

// A function to draw ellipses over the detected keypoints

function drawKeypoints() {

// Loop through all the poses detected

for (let i = 0; i 《 poses.length; i++) {

// For each pose detected, loop through all the keypoints

for (let j = 0; j 《 poses[i].pose.keypoints.length; j++) {

// A keypoint is an object describing a body part (like rightArm or leftShoulder)

let keypoint = poses[i].pose.keypoints[“0”];

noseX[i] = keypoint.position.x.toFixed(0);

oneMessage = (parseInt(noseX[0],10));

//console.log(typeof(oneMessage));

select(‘#noseX_1’).html(noseX.toString());

//console.log(typeof(oneMessage))

// Only draw an ellipse is the pose probability is bigger than 0.2

if (keypoint.score 》 0.2) {

fill(255, 0, 0);

noStroke();

ellipse(keypoint.position.x, keypoint.position.y, 10, 10);

}

}

}

}

就是这样!如果您打开html文件,您将看到网络摄像头镜头上方有一个红点但镜像(否则您的伺服将远离您)。您还将看到发送到Arduino的X数据

第3步:使用P5.serialcontrol

这是一个快速的。为了建立我的草图和Arduino之间的串行通信,我们需要一个处理所有串行数据的中间人将它发送到另一个。以前人们会使用不太友好的Node.js,p5.serialcontrol修复了这个问题。你可以在这里下载p5.serialcontrol。对于Windows用户,请查看Alpha 5版本。

可悲的是,p5.serialcontrol并不完美,有时会崩溃。所以要小心你发送了多少数据。

步骤4:一切Arduino

接下来是Arduino代码并连接伺服和LED。

#include

Servo myservo;

const int redPin = 12;

int newval1, oldval1;

int servoValue;

int space = 2;

int ledState = LOW;

int pos = 0;

unsigned long currentMillis = 0; // stores the value of millis() in each iteration of loop()

unsigned long previousServoMillis = 0; // the time when the servo was last moved

unsigned long previousMillis = 0;

const long interval = 500;

int servoPosition = 90;

int servoSlowInterval = 60; // millisecs between servo moves

int servoFastInterval = 10;

int servoInterval = servoSlowInterval; // initial millisecs between servo moves

int servoDegrees = 2; // amount servo moves at each step

int servoMinDegrees = 45; // will be changed to negative value for movement in the other direction

int servoMaxDegrees = 135;

int increment; // increment to move for each interval

int updateInterval; // interval between updates

unsigned long lastUpdate; // last update of position

int counter = 0;

bool executed = false;

void servoSweep() {

if (currentMillis - previousServoMillis 》= servoInterval) {

previousServoMillis += servoInterval;

servoPosition = servoPosition + servoDegrees; // servoDegrees might be negative

if (servoPosition 《= servoMinDegrees) {

// when the servo gets to its minimum position change the interval to change the speed

if (servoInterval == servoSlowInterval) {

servoInterval = servoSlowInterval; //servoFastInterval

}

else {

servoInterval = servoSlowInterval;

}

}

if ((servoPosition 》= servoMaxDegrees) || (servoPosition 《= servoMinDegrees)) {

// if the servo is at either extreme change the sign of the degrees to make it move the other way

servoDegrees = - servoDegrees; // reverse direction

// and update the position to ensure it is within range

servoPosition = servoPosition + servoDegrees;

}

// make the servo move to the next position

myservo.write(servoPosition);

digitalWrite(redPin, LOW);

// and record the time when the move happened

}

void ledBlink () {

if (currentMillis - previousMillis 》= interval) {

previousMillis = currentMillis;

if (ledState == LOW) {

ledState = HIGH;

} else {

ledState = LOW;

}

digitalWrite(redPin, ledState);

}

}

void setup() {

myservo.attach(9); // servo

Serial.begin(19200); // initialize serial communication

//Serial.setTimeout(10);

pinMode(redPin, OUTPUT);

myservo.write(90);

}

void loop() {

currentMillis = millis();

if (executed == false) {

servoSweep();

delay(50);

}

}

void serialEvent () {

while (Serial.available()) {

newval1 = Serial.read(); //read it

//Serial.println(newval1);

if (newval1 》 0 && newval1 != ‘c’) {

executed = true;

ledBlink();

//if (newval1 《 (oldval1 - space) || newval1 》 (oldval1 + space)) { //dead band setup

myservo.write(newval1);

delay(15);

//oldval1 = newval1;

//}

}

if (newval1 == ‘c’) {

executed = false;

}

}

}

正如您所看到的,我使用了不使用delay()的代码,因此可以随时停止扫描功能,即如果某人被识别。

在此之后,您可以测试整个系统。首先插入你的Arduino与led和伺服(我在我的箭头上进行测试),然后启动p5.serialcontrol然后打开html文件。如果一切正常,箭头将始终指向您。如果您走出网络摄像头捕获的图像,伺服将扫描。

第5步:制作安全摄像头

所有这些软件和代码都让我们开始制作东西!

我模仿了安全摄像头的这个原型,并为激光切割机设计了它。我用木胶组装了这些碎片。相机内部有足够的空间容纳Arduino,它需要一些额外的孔才能将所有电线都放入其中。我还将LED放置在正确的位置,并在前面安装了黑色镜头,以提供额外的安全摄像头效果。我用一些塑料薄膜消除了led灯的光线。

接下来,我准备整个事情并用典型的安全摄像头颜色绘制它。

步骤6:安装备注

关于在某处设置此安装的最后一些评论。安全摄像头本身没有摄像头摄像头,可以看到前面的人。我所做的是将网络摄像头隐藏在支柱中并在其前面放置一个带孔的海报,以隐藏相机,这对于创造正确的效果至关重要。

您还可以做的就是放置相机处于一个更典型的安全摄像头位置,就像挂在天花板或墙壁上一样。但你可以用它做任何你想做的事!

第7步:结束结果

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控摄像机
    +关注

    关注

    0

    文章

    45

    浏览量

    12576
收藏 人收藏

    评论

    相关推荐

    AI智能识别监测摄像机

    随着人工智能技术的飞速发展,AI智能识别监测摄像机逐渐成为各行各业安全管理的重要工具。这种高科技设备不仅具备传统监控摄像机的基本功能,还通过深度学习和图像处理等先进技术,实现了对人、车、物体及行为
    的头像 发表于 11-28 10:39 216次阅读
    AI智能识别监测<b class='flag-5'>摄像机</b>

    MS41928M——网络摄像机·监控摄像机用镜头驱动芯片(内置光圈控制)

    MS41928M 是一款用于网络摄像机监控摄像机的镜头驱动芯片。芯片内置光圈控制功能;通过电压驱动方式以及扭矩纹波修正技术,实现了超低噪声微步驱动。提供方案和FAE支持,欢迎咨询了解
    的头像 发表于 11-18 11:58 233次阅读
    MS41928M——网络<b class='flag-5'>摄像机</b>·<b class='flag-5'>监控</b><b class='flag-5'>摄像机</b>用镜头驱动芯片(内置光圈控制)

    AI图像识别摄像机

    ?AI图像识别摄像机是一种集成了先进算法和深度学习模型的智能监控设备。这些摄像机不仅能够捕捉视频画面,还能实时分析和处理所拍摄的内容,从而实现对特定对象、场景或行
    的头像 发表于 11-08 10:38 227次阅读
    AI图像识别<b class='flag-5'>摄像机</b>

    MS41908M——网络摄像机·监控摄像机用镜头驱动芯片

    用于摄像机用镜头聚焦、变倍、自动光圈驱动,提供FAE支持
    的头像 发表于 10-19 17:00 395次阅读
    MS41908M——网络<b class='flag-5'>摄像机</b>·<b class='flag-5'>监控</b><b class='flag-5'>摄像机</b>用镜头驱动芯片

    车辆冲洗监测摄像机

    车辆冲洗监测摄像机是一种结合了监控摄像技术和智能分析技术的先进设备,旨在通过实时监测和分析车辆冲洗过程中的情况,识别是否存在异常或问题,并及时发出警报通知相关人员。这种摄像机在汽车服务
    的头像 发表于 09-29 10:37 248次阅读
    车辆冲洗监测<b class='flag-5'>摄像机</b>

    戴头盔识别摄像机

    戴头盔识别摄像机是一种结合了人工智能技术和监控摄像技术的先进设备,旨在通过实时监测和分析监控画面中的人员头部状态信息,识别是否有人未佩戴安全头盔,并及时发出警报提醒相关人员。这种
    的头像 发表于 09-19 10:06 256次阅读
    戴头盔识别<b class='flag-5'>摄像机</b>

    防跌倒识别摄像机

    防跌倒识别摄像机是一种结合了人工智能技术和监控摄像技术的先进设备,旨在通过实时监测和分析监控画面中的行为动作,及时发现并预防跌倒事件的发生。这种摄像
    的头像 发表于 09-09 10:52 457次阅读
    防跌倒识别<b class='flag-5'>摄像机</b>

    行为分析智能监测摄像机

    行为分析智能监测摄像机是一种结合了人工智能和机器学习技术的智能设备,能够实时监测目标区域内的行为动态,并通过分析和识别行为特征来提供安全监控和管理。这种摄像机在安防领域、智能交通和智能家居等领域有着
    的头像 发表于 08-21 10:14 278次阅读
    行为分析智能监测<b class='flag-5'>摄像机</b>

    水位自动识别摄像机

    管理等方面提供有力支持。优势与特点水位自动识别摄像机是一种结合了摄像监控技术和图像识别技术的设备,它能够通过拍摄、分析水面影像,自动识别水位的高低,并实时上传数据到监测
    的头像 发表于 07-31 10:34 363次阅读
    水位自动识别<b class='flag-5'>摄像机</b>

    索尼FCB-CR8530自动聚焦摄像机:安防监控领域的卓越表现

    凯茉锐索尼FCB-CR8530自动聚焦摄像机,凭借其卓越的技术特性和广泛的应用适应性,在安防监控领域展现出了非凡的性能。这款摄像机不仅具备高清晰度图像、强大的光学变焦能力和光学防抖技术,还具备多项适应复杂环境的功能,使其成为了安
    的头像 发表于 06-27 13:40 647次阅读

    索尼FCB-CR8530:满足海洋船舶监控摄像机严苛要求的卓越选择

    在海洋船舶监控领域,摄像机的性能要求极高。海洋环境恶劣,摄像机需要能够应对盐雾腐蚀、风浪冲击、光线变化等多种挑战。索尼FCB-CR8530摄像机凭借其出色的技术特性和广泛的应用适应性,
    的头像 发表于 06-25 11:17 378次阅读
    索尼FCB-CR8530:满足海洋船舶<b class='flag-5'>监控</b><b class='flag-5'>摄像机</b>严苛要求的卓越选择

    自动识别水位预警摄像机

    自动识别水位预警摄像机是现代城市水域安全管理的重要组成部分。这种摄像机具有多项功能,使其在水位监测和异常情况识别方面发挥关键作用。其高清摄像头能够捕捉水位变化的细节,提供精确的监控画面
    的头像 发表于 06-07 10:47 547次阅读
    自动识别水位预警<b class='flag-5'>摄像机</b>

    客流量监测识别摄像机

    客流量监测识别摄像机是一种在商场、车站、机场等公共场所广泛应用的监测设备。通过视频监控和智能识别技术,这种摄像机可以实时监测客流量,准确统计出入人数,并进行分析和预测,为管理者提供重要的数据支持
    的头像 发表于 05-17 10:37 418次阅读
    客流量监测识别<b class='flag-5'>摄像机</b>

    AI车牌监测识别摄像机

    AI车牌监测识别摄像机是一种基于人工智能技术的高级监控设备,用于识别和记录车辆的车牌信息。该摄像机利用深度学习算法和图像识别技术,能够快速准确地捕捉车辆牌照信息,有助于提高交通安全管理和追踪犯罪
    的头像 发表于 04-02 09:55 440次阅读
    AI车牌监测识别<b class='flag-5'>摄像机</b>

    AI人员入侵识别摄像机

    AI人员入侵识别摄像机是一种智能监控设备,利用人工智能技术辨认并报警可能的入侵行为。这种摄像机利用深度学习算法实时分析监控画面,识别出普通行人和潜在入侵者之间的差异,从而更准确地预警可
    的头像 发表于 03-15 11:40 476次阅读
    AI人员入侵识别<b class='flag-5'>摄像机</b>