[PYTHON] Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera

Anfrage: Ich möchte das Ende der verarbeiteten Produkte sehen

Ich würde gerne wissen, wann das Produkt in der automatischen Spur, dh das endgültig verarbeitete Produkt, in der Maschinenwerkstatt fertiggestellt ist. 製品のつまり.jpg Ich möchte die Position des roten Griffs des Ventils wissen (Anzeige öffnen / schließen). バルブの状態.png

Das Produkt ist gelb und der Hintergrund (Spur) ist die Grundfarbe Weiß, Blau oder Schwarz. Der fertige Sensor ist zu teuer, deshalb möchte ich, dass Sie ihn billig herstellen.

Fertiges Produkt

Verbinden Sie den Raspeltorte mit dem lokalen WIFI. http://"ラズパイのIPアドレス"/home.php

加工品.jpg

抜き出し場所.JPG

Geben Sie das relevante Teil aus dem Kamerabild an und extrahieren Sie es. Geben Sie den Farbbereich an und geben Sie GPIO aus, wenn der Farbbereich eingegeben wird. Die Alarmlampe wird am Ausgang des GPIO aktiviert. Der Alarm wird durch Zurücksetzen des Alarms gelöscht.

Raspeye-Einstellungen

Python OpenCV herunterladen Referenzseite: Erfahrungsberichte und Memos von Softwareentwicklern, die Informatik gelernt haben

sudo apt-get install libopencv-dev sudo apt-get install python-opencv

Apache herunterladen Referenzseite @ mono_taro sudo apt-get update sudo apt-get upgrade sudo apt-get install apache2 apachectl -v

PHP herunterladen Referenzseite: Die moderne Steinzeit.

sudo apt install php7.2 libapache2-mod-php7.2



# Erstellen Sie PHP und HTML

#### **`/var/www/html/home.php`**
```ruby

<html>
<head>
<meta http-equiv="content-type" charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="refresh" content="5" >
</head>
</html>
<form action="set.php" method="get">
<body>
	<h1>Kamerabild</h1>
	<?php
		$lines_reset = file('/home/pi/Documents/reset.csv');
		foreach($lines_reset as $line_reset){
			$data_reset = explode(',',$line_reset);
		if ($data_reset[0] == 1){
		echo "<FONT COLOR=\"RED\">Derzeit läuft der Alarm Um abzubrechen, drücken Sie die Abwärtstaste</FONT>";}
		}
	?>
		<img src="1.jpg?1">
		<h2>Extrahiertes Bild</h2>
		<img src="2.jpg?1">
</body>
<?php
$lines = file('/home/pi/Documents/color.csv');
foreach($lines as $line){
	$data = explode(',',$line);	
	echo '<p>';
	echo 'Rot R.',$data[0];
	echo 'Grün G:',$data[1];
	echo 'Blau B:',$data[2];	
	echo '</p>';
}
?>
<a href="./set.html">Einstellungsbildschirm</a>
<a href="./reset.html">Alarm zurücksetzen</a>
</form>

/var/www/html/set.html


<form action="set.php" method="get">
<p>
<a href="./home.php">Rückkehr</a>
</p>
<img src="1.jpg ">
<p>Farbbereichsspezifikation</p>
<p>Rote Untergrenze: <input type="number" name="r_2_1" value="1" min="0" max="255"></p>
<p>Rote Obergrenze: <input type="number" name="r_2_2" value="1" min="0" max="255"></p>
<p>Grüne Untergrenze: <input type="number" name="g_2_1" value="1" min="0" max="255"></p>
<p>Grüne Obergrenze: <input type="number" name="g_2_2" value="1" min="0" max="255"></p>
<p>Blaue Untergrenze: <input type="number" name="b_2_1" value="1" min="0" max="255"></p>
<p>Blaue Obergrenze: <input type="number" name="b_2_2" value="1" min="0" max="255"></p>
<p>Bildextraktionsdatei: Oben und unten sind Abstände von oben, links und rechts sind Abstände von links</p>
<p>Top Top: <input type="number" name="top" value="1" min="0" max="2000"></p>
<p>Unterer Bot: <input type="number" name="bot" value="100" min="0" max="2000"></p>
<p>Links Links: <input type="number" name="left" value="1" min="0" max="2000"></p>
<p>Richtig richtig: <input type="number" name="right" value="100" min="0" max="2000"></p>
<p>Verschlussintervall, angegebene Anzahl von Malen</p>
<p>Verschlussintervall Sekunden.: <input type="number" name="interval" value="60" min="10" max="6000"></p>
<p>Anzahl: <input type="number" name="nutime" value="1" min="1" max="100"></p>
<input type="submit" />
<p> </p>
<p>Ergänzende Farberklärung</p>
<p>Rot R255 G0 B0</p>
<p>Schwarz R0 G0 B0</p>
<p>Weiß R255 G255 B255</p>
<p>Gelb R255 G255 B0</p>
<p>Grau R128 G128 B128</p>
<p>Bitte suchen Sie nach anderen Farben nach RGB-Farbe.</p>
<p>Die angegebene Anzahl von Malen gibt an, wie oft das Relais arbeitet, wenn es sich kontinuierlich innerhalb des angegebenen Bereichs befindet.</p>
</form>

/var/www/html/set.php


<meta http-equiv="content-type" charset="utf-8">
<?php 
     $r_2_1=htmlspecialchars($_GET["r_2_1"],ENT_QUOTES);
     $r_2_2=htmlspecialchars($_GET["r_2_2"],ENT_QUOTES);
     $g_2_1=htmlspecialchars($_GET["g_2_1"],ENT_QUOTES);
     $g_2_2=htmlspecialchars($_GET["g_2_2"],ENT_QUOTES);
     $b_2_1=htmlspecialchars($_GET["b_2_1"],ENT_QUOTES);
     $b_2_2=htmlspecialchars($_GET["b_2_2"],ENT_QUOTES);
     $top=htmlspecialchars($_GET["top"],ENT_QUOTES);
     $bot=htmlspecialchars($_GET["bot"],ENT_QUOTES);
     $left=htmlspecialchars($_GET["left"],ENT_QUOTES);
     $right=htmlspecialchars($_GET["right"],ENT_QUOTES);
     $interval=htmlspecialchars($_GET["interval"],ENT_QUOTES);
     $nutime=htmlspecialchars($_GET["nutime"],ENT_QUOTES);
?>
<body>
<?php echo $_GET["r_2_1"]; ?>
<?php 
$data = [
    [$_GET["r_2_1"], $_GET["r_2_2"], $_GET["g_2_1"], $_GET["g_2_2"], $_GET["b_2_1"], $_GET["b_2_2"],
    $_GET["top"], $_GET["bot"], $_GET["left"], $_GET["right"],
    $_GET["interval"], $_GET["nutime"]],
];
$fp = fopen('/home/pi/Documents/position.csv', 'w');
foreach ($data as $line) {
	fputcsv($fp, $line);
}
fclose($fp);
?>
<p>
<a href="./home.php">Rückkehr</a>
</p>

/var/www/html/reset.html


<meta http-equiv="content-type" charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache">
<form action="reset.php" method="get">
<input type="submit" />
</form>

/var/www/html/reset.php


<meta http-equiv="content-type" charset="utf-8">
<?php 
$data = [["0"]];
$fp = fopen('/home/pi/Documents/reset.csv', 'w');
foreach ($data as $line) {
	fputcsv($fp, $line);}
fclose($fp);
?>
<p>
<a href="./home.php">Rückkehr</a>
</p>

Python- und CSV-Erstellung

/home/pi/Documents/gazou.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import cv2, os
import numpy as np
import csv
import time
import RPi.GPIO as GPIO
time.sleep(60)#Wartezeit beim Starten von Raspeye
#GPIO-Einstellungen
PIN = 14
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.OUT)
#Speicherort der Bilddatei
image_file = '/var/www/html/1.jpg' #Fotografie
image_file_2 = '/var/www/html/2.jpg' #Überprüfung 1
#Ort der CSV zum Lesen
poss = '/home/pi/Documents/position.csv'
colo_0 = '/home/pi/Documents/color0.csv'
colo_1 = '/home/pi/Documents/color.csv'
poss_reset = '/home/pi/Documents/reset.csv'
while True:
	try :
		with open(poss) as data0:#Lesen Sie die Position des Ausschnitts
			reader = csv.reader(data0)
			data1 = [row for row in reader]
		#Bereich gelesen
		r_2_1 = int(data1[0][0]) #Rote Untergrenze img2
		r_2_2 = int(data1[0][1]) #Rote Obergrenze img2
		g_2_1 = int(data1[0][2]) #Grüne Untergrenze img2
		g_2_2 = int(data1[0][3]) #Grüne Obergrenze img2
		b_2_1 = int(data1[0][4]) #Blaue Untergrenze img2
		b_2_2 = int(data1[0][5]) #Blaue Obergrenze img2
		#img2.Schneiden Sie einen Teil von jpg aus
		top_2   = int(data1[0][6])
		bot_2   = int(data1[0][7])
		left_2  = int(data1[0][8])
		right_2 = int(data1[0][9])
		#Anzahl der Wiederholungssekunden und Anzahl der Betriebsbestätigungen
		jobs_s = int(data1[0][10])
		time.sleep(jobs_s)
		with open(poss_reset) as data_reset:#CSV-Lesevorgang zurücksetzen
			reader_reset = csv.reader(data_reset)
			data_reset1 = [row for row in reader_reset]
		data_resset2 = int(data_reset1[0][0])
		with open(colo_0) as data2:#Standarddaten zum Schreiben lesen
			reader = csv.reader(data2)
			data3 = [row for row in reader]
		cam = cv2.VideoCapture(0)
		#Video von der Kamera lesen
		_, img = cam.read()
		#Als Bilddatei exportieren
		img2 = img[top_2 : bot_2, left_2: right_2]
		#Bild speichern
		cv2.imwrite(image_file, img)
		cv2.imwrite(image_file_2, img2)
		#RGB-Durchschnittswert ausgeben
		#Machen Sie es eindimensional mit Abflachung und erhalten Sie den Durchschnitt mit Mittelwert
		r2 = img2.T[2].flatten().mean()
		g2 = img2.T[1].flatten().mean()
		b2 = img2.T[0].flatten().mean()		
		if data_resset2 == 0:
			GPIO.output(PIN, GPIO.LOW) #Vorerst schneiden
			if r_2_1 < r2 < r_2_2 and g_2_1 < g2 < g_2_2 and b_2_1 < b2 < b_2_2:
				GPIO.output(PIN, GPIO.HIGH)
				data_resset2 = 1
		#RGB-Durchschnittswert abrufen
		data3[0][0] = '%.0f' % r2
		data3[0][1] = '%.0f' % g2
		data3[0][2] = '%.0f' % b2
		#Speichern Sie CSV
		with open(colo_1, 'w') as f:
			writer = csv.writer(f)
			for data4 in data3:
				writer.writerow(data4)
		data_reset1[0][0] = data_resset2
		with open(poss_reset, 'w') as f:
			writer = csv.writer(f)
			for data_reset2 in data_reset1:
				writer.writerow(data_reset2)
		#Nachbearbeitung
		cam.release()
		cv2.destroyAllWindows()
	except:
		time.sleep(30)
		pass

/home/pi/Documents/position.csv


1,1,1,1,1,1,1,100,1,100,60,1

/home/pi/Documents/color0.csv


100,100,100,100,100,100

/home/pi/Documents/color.csv


100,100,100,100,100,100

/home/pi/Documents/reset.csv


0

Stellen Sie ein, dass Python beim Start gestartet wird.

Starten Sie gazou.py automatisch mit sudo. Nur sudo schreibt das JPG-Bild nach / var / www / html / Referenzseite @ yuru-camper

Kamera benutzt

C270N HD WEBCAM Logicool-Site

Was ich in Zukunft machen möchte

Da der Einstellungsbildschirm wie unten gezeigt schwer einzustellen ist, möchte ich den Extraktionsort mit der Maus auswählen können. Ich möchte auch in der Lage sein, die Farbeinstellungen mit der Maus zu bestimmen. Im aktuellen Zustand muss die Einstellung viele Versuche und Irrtümer wiederholen. 設定画面.JPG

Recommended Posts

Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Machen Sie einen einfachen CO2-Inkubator mit Raspberry PI und CO2-Sensor (MH-Z14A)
Erstellen Sie ein Besuchermeldungssystem mit Raspberry Pi
Verwenden einer Webkamera mit Raspberry Pi
Erstellen Sie eine Partition und installieren Sie Raspberry Pi OS
Erstellen Sie Ihre eigene IoT-Plattform mit raspberrypi und ESP32 (Teil 3) ~ ESP32-Einstellungen Analoger Temperatursensor
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Grundeinstellungen für die Verwendung des Grove Pi + Starterkits und der Kamera mit Raspberry Pi
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Erstellen Sie eine Webmap mit Python und GDAL
Raspberry Pi Videokamera
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
Verwendung des digitalen 1-Draht-Temperatursensors DS18B20 mit Raspberry Pi von Python
Verwendung des digitalen Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Erklären Sie vorsichtig den Prozess der Erstellung einer einfachen Überwachungskamera ohne Server mithilfe von Raspeye, Gmail API und Line API
Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Erstellen Sie Ihre eigene IoT-Plattform mit raspberrypi und ESP32 (Teil 2) ~ ESP32-Einstellung L Chika
Innenüberwachung mit Raspberry Pi
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
Ich habe versucht, [eine bestimmte Aufgabe] mit einem Raspeltorte zu automatisieren
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
USB über Ethernet mit Raspberry pi
MQTT auf Raspberry Pi und Mac
So laden Sie Dateien mit Python in den Cloud-Speicher hoch [Erstellen Sie mit Raspberry PI # 1 eine Festkommakamera]
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie ein verschachteltes Wörterbuch mit defaultdict
Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
Versuchen Sie es mit ArUco mit Raspberry Pi
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Erstellen Sie ganz einfach einen TalkBot mit Discord.py und der Talk-API von A3RT (pya3rt).
Wiegeinstrument mit Himbeer-Pi und hx711 (GUI-Anzeige in Tkinter)
Raspberry Pi --1 - Zum ersten Mal (Schließen Sie einen Temperatursensor an, um die Temperatur anzuzeigen)
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Erstellen Sie die CRUD-API mit der Fast API
Erstellen Sie mit Boost.Python einen C-Sprach-Wrapper
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
Erfassen Sie den Sensorwert von Grove Pi + mit Raspberry Pi und speichern Sie ihn in Kintone
Erstellen Sie einen Socket mit einer Ethernet-Schnittstelle (eth0, eth1) (Linux, C, Raspberry Pi).
Erstellen Sie einen Stapel mit einer Warteschlange und eine Warteschlange mit einem Stapel (von LetCode / Implement Stack using Queues, Implement Queue using Stacks)
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Haustierüberwachung mit Rekognition und Raspberry pi
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Raspberry Pi Security Infrarotkamera (Python Edition)