[PYTHON] Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra

Demande: je veux voir la fin des produits transformés

Je voudrais savoir quand le produit dans la voie automatique, c'est-à-dire le produit final transformé, est terminé à l'atelier d'usinage. 製品のつまり.jpg Je souhaite connaître la position de la poignée rouge de la vanne (affichage ouverture / fermeture). バルブの状態.png

Le produit est jaune et le fond (voie) est la couleur principale du blanc, du bleu ou du noir. Le capteur prêt à l'emploi est trop cher, je veux donc que vous le fabriquiez à moindre coût.

Produit fini

Connectez la tarte aux râpes au WIFI local. http://"ラズパイのIPアドレス"/home.php

加工品.jpg

抜き出し場所.JPG

Spécifiez la partie appropriée de l'image de la caméra et extrayez-la. Spécifiez la gamme de couleurs et le GPIO de sortie lorsqu'il entre dans la gamme de couleurs. Le voyant d'alarme est activé par la sortie de GPIO. L'alarme est annulée par la réinitialisation de l'alarme.

Préférences Raspeye

téléchargement python OpenCV Site de référence: Dossiers d’expérience et mémos d’ingénieurs en informatique ayant appris l’informatique

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

Téléchargement Apache Site de référence @ mono_taro sudo apt-get update sudo apt-get upgrade sudo apt-get install apache2 apachectl -v

téléchargement php Site de référence: L'âge de pierre moderne.

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



# Créer php et 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>Image de la caméra</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\">Une alarme est actuellement en cours. Pour annuler, appuyez sur le bouton bas.</FONT>";}
		}
	?>
		<img src="1.jpg?1">
		<h2>Image extraite</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 'Rouge R',$data[0];
	echo 'Vert G:',$data[1];
	echo 'Bleu B:',$data[2];	
	echo '</p>';
}
?>
<a href="./set.html">Écran de réglage</a>
<a href="./reset.html">Réinitialisation d'alarme</a>
</form>

/var/www/html/set.html


<form action="set.php" method="get">
<p>
<a href="./home.php">Revenir</a>
</p>
<img src="1.jpg ">
<p>Spécification de la gamme de couleurs</p>
<p>Limite inférieure rouge: <input type="number" name="r_2_1" value="1" min="0" max="255"></p>
<p>Limite supérieure rouge: <input type="number" name="r_2_2" value="1" min="0" max="255"></p>
<p>Limite inférieure verte: <input type="number" name="g_2_1" value="1" min="0" max="255"></p>
<p>Limite supérieure verte: <input type="number" name="g_2_2" value="1" min="0" max="255"></p>
<p>Limite inférieure bleue: <input type="number" name="b_2_1" value="1" min="0" max="255"></p>
<p>Limite supérieure bleue: <input type="number" name="b_2_2" value="1" min="0" max="255"></p>
<p>Fichier d'extraction d'image: le haut et le bas sont des distances d'en haut, gauche et droite sont des distances de gauche</p>
<p>Top top: <input type="number" name="top" value="1" min="0" max="2000"></p>
<p>Bot inférieur: <input type="number" name="bot" value="100" min="0" max="2000"></p>
<p>Gauche gauche: <input type="number" name="left" value="1" min="0" max="2000"></p>
<p>Droite droite: <input type="number" name="right" value="100" min="0" max="2000"></p>
<p>Intervalle d'obturation, nombre de fois spécifié</p>
<p>Intervalle d'obturation secondes (s): <input type="number" name="interval" value="60" min="10" max="6000"></p>
<p>Nombre de fois: <input type="number" name="nutime" value="1" min="1" max="100"></p>
<input type="submit" />
<p> </p>
<p>Explication supplémentaire des couleurs</p>
<p>Rouge R255 G0 B0</p>
<p>Noir R0 G0 B0</p>
<p>Blanc R255 G255 B255</p>
<p>Jaune R255 G255 B0</p>
<p>Gris R128 G128 B128</p>
<p>Veuillez rechercher d'autres couleurs par couleur RVB.</p>
<p>Le nombre de fois spécifié est le nombre de fois où le relais fonctionne lorsqu'il est continuellement dans la plage spécifiée.</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">Revenir</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">Revenir</a>
</p>

création python et CSV

/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)#Temps d'attente au démarrage de Raspeye
#Paramètres GPIO
PIN = 14
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.OUT)
#Emplacement de stockage du fichier image
image_file = '/var/www/html/1.jpg' #la photographie
image_file_2 = '/var/www/html/2.jpg' #Vérification 1
#Emplacement du CSV pour la lecture
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:#Lire l'emplacement de la découpe
			reader = csv.reader(data0)
			data1 = [row for row in reader]
		#Lecture de plage
		r_2_1 = int(data1[0][0]) #Limite inférieure rouge img2
		r_2_2 = int(data1[0][1]) #Limite supérieure rouge img2
		g_2_1 = int(data1[0][2]) #Limite inférieure verte img2
		g_2_2 = int(data1[0][3]) #Limite supérieure verte img2
		b_2_1 = int(data1[0][4]) #Limite inférieure bleue img2
		b_2_2 = int(data1[0][5]) #Limite supérieure bleue img2
		#img2.Découpez une partie de jpg
		top_2   = int(data1[0][6])
		bot_2   = int(data1[0][7])
		left_2  = int(data1[0][8])
		right_2 = int(data1[0][9])
		#Nombre de secondes de répétition et nombre de confirmations d'opération
		jobs_s = int(data1[0][10])
		time.sleep(jobs_s)
		with open(poss_reset) as data_reset:#Réinitialiser la lecture CSV
			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:#Lire les données par défaut pour l'écriture
			reader = csv.reader(data2)
			data3 = [row for row in reader]
		cam = cv2.VideoCapture(0)
		#Lire la vidéo de la caméra
		_, img = cam.read()
		#Exporter en tant que fichier image
		img2 = img[top_2 : bot_2, left_2: right_2]
		#Enregistrer l'image
		cv2.imwrite(image_file, img)
		cv2.imwrite(image_file_2, img2)
		#Valeur moyenne RVB de sortie
		#Rendez-le unidimensionnel avec aplatir et obtenez la moyenne avec la moyenne
		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) #Coupé pour le moment
			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
		#Obtenir la valeur moyenne RVB
		data3[0][0] = '%.0f' % r2
		data3[0][1] = '%.0f' % g2
		data3[0][2] = '%.0f' % b2
		#Enregistrer 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)
		#post-processus
		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

Défini pour démarrer python au démarrage.

Démarrez automatiquement gazou.py avec sudo. Seul sudo écrira l'image jpg dans / var / www / html / Site de référence @ yuru-camper

Appareil photo utilisé

C270N HD WEBCAM site logicool

Ce que je veux faire dans le futur

Étant donné que l'écran de réglage est difficile à définir comme indiqué ci-dessous, je souhaite pouvoir sélectionner l'emplacement d'extraction avec la souris. Je souhaite également pouvoir déterminer les paramètres de couleur avec la souris. Dans l'état actuel, le paramètre doit répéter de nombreux essais et erreurs. 設定画面.JPG

Recommended Posts

Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Fabriquez un incubateur à CO2 simple à l'aide de Raspberry PI et d'un capteur de CO2 (MH-Z14A)
Créer un système de notification des visiteurs à l'aide de Raspberry Pi
Utiliser une webcam avec Raspberry Pi
Créez une partition, puis installez le système d'exploitation Raspberry Pi
Créez votre propre plate-forme IoT à l'aide de raspberrypi et ESP32 (partie 3) ~ Paramètres ESP32 Capteur de température analogique
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)
Créez un compteur de voiture avec Raspberry Pi
Paramètres initiaux pour l'utilisation du kit de démarrage et de la caméra Grove Pi + avec Raspberry Pi
Essayez d'utiliser le code QR avec Raspberry Pi
Créer une carte Web en utilisant Python et GDAL
Caméra vidéo Raspberry Pi
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Utilisation du capteur de température numérique à 1 fil DS18B20 avec Raspberry Pi de Python
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 2) ~ ESP32 Setting L Chika
Surveillance intérieure à l'aide de Raspberry Pi
Débutant Python s'ouvre et se ferme avec Raspberry Pi
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
USB sur Ethernet avec Raspberry pi
MQTT sur Raspberry Pi et Mac
Comment télécharger des fichiers sur Cloud Storage à l'aide de Python [Créer une caméra à point fixe avec Raspberry PI # 1]
Créer une interface graphique python à l'aide de tkinter
Créer un dictionnaire imbriqué à l'aide de defaultdict
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Création et déploiement d'applications Django (PTVS) à l'aide du stockage Azure Table
Essayez d'utiliser ArUco avec Raspberry Pi
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Créez facilement un TalkBot en utilisant Discord.py et l'API Talk d'A3RT (pya3rt).
Instrument de pesage utilisant Raspberry Pi et Hx711 (affichage GUI dans Tkinter)
Raspberry Pi --1 --Première fois (Connectez un capteur de température pour afficher la température)
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Créer une API CRUD à l'aide de l'API rapide
Créez un wrapper de langage C à l'aide de Boost.Python
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Détectez les signaux analogiques avec un convertisseur A / N en utilisant python sur Raspberry Pi 3!
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Créer une socket avec une interface Ethernet (eth0, eth1) (Linux, C, Raspberry Pi)
Créer une pile avec une file d'attente et une file d'attente avec une pile (à partir de LetCode / Implémenter la pile à l'aide de files d'attente, Implémenter la file d'attente à l'aide de piles)
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Surveillance des animaux avec Rekognition et Raspberry pi
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Caméra infrarouge de sécurité Raspberry Pi (édition Python)