[PYTHON] Beurteilung des hintergrundbeleuchteten Bildes mit OpenCV

Einführung

Hallo, ich heiße Kano. Ich bin verantwortlich für den Kundensupport für einen Einzelhandelsdienst namens Insight for Retail bei ABEJA.

Vor kurzem lebe ich ein veganes Leben unter dem Einfluss eines Dokumentarfilms namens Game Changer, den ich auf Netflix gesehen habe. Manchmal esse ich jedoch Jiro, Familie und Kotteri Ramen, damit ich nicht abnehmen kann.

Ich bin kein Ingenieur, aber ich werde mein Bestes geben, um zu schreiben. Dies ist der Artikel am 13. Tag des ABEJA Adventskalenders 2019.

Auslösen

Ich bei ABEJA habe das Gefühl, dass Ingenieure es wirklich genießen, Dinge zu machen.

Natürlich ist es auch Arbeit, aber es gibt auch Dinge, die nichts mit Arbeit zu tun haben. Zum Beispiel Lager AI oder Kultivierung von Shiitake mit IoT-Geräten.

Als ich 2018 zu ABEJA kam und jeden Tag mit ihnen arbeitete, wurde ich immer eifriger, etwas zu machen.

Darüber hinaus schätzt ABEJA technopreneurship und die Idee, dass selbst Geschäftsmitglieder durch den Einsatz von Technologie-Innovationen innovieren können. Es gab auch, dass es getan wurde.

Kundenunterstützungsrolle für einen Service namens Insight for Retail

Übrigens, wenn ich den Service Insight for Retail erkläre, für den ich sehr grob verantwortlich bin,

・ Installieren Sie IoT-Geräte wie Kameras in Einzelhandelsgeschäften, um Daten zu erfassen ・ AI analysiert die erfassten Daten ・ Aggregieren Sie die analysierten Daten und visualisieren Sie sie auf leicht verständliche Weise ・ Und datengesteuertes Store Management realisieren

Das ist.

Daher erfolgt bei der Einführung des Dienstes immer die Installation von IoT-Geräten im Geschäft, aber die Bauarbeiten gehören auch zur Rolle des Kundensupports. Mit anderen Worten, eine der wichtigsten Aufgaben des Insight for Retail-Kundensupports besteht darin, "AI mit sauberen Daten zu versorgen, die für die Analyse von IoT-Geräten geeignet sind".

(Obwohl dies nicht mit diesem Artikel zusammenhängt, führt der Kundensupport auch Nachforschungen und Überprüfungen neuer IoT-Geräte durch. Natürlich werden auch Anfragen und Ankündigungen bearbeitet, was den Hauptteil des Kundensupports darstellt, so gewöhnliche SaaS-Unternehmen Ich bin der Meinung, dass das Verteidigungsspektrum im Vergleich zum Kundensupport von breit ist. Ich möchte diesen Bereich vorstellen, wenn sich eine Gelegenheit ergibt.)

Ich möchte Hintergrundbeleuchtung erkennen

Übrigens, wenn ich die von IoT-Geräten täglich erfassten Daten als Kundensupport verarbeite, stelle ich fest, dass es wirklich schwierig ist, Daten im realen Raum zu erfassen. Zum Beispiel von hinten beleuchtet.

Unten ist ein Bild davon, wie ich diesen Sommer mit einem Freund den Fuji bestiegen habe. Das Gegenlicht des kommenden Lichts ist erstaunlich.

Eine der Dienstleistungen von Insight for Retail besteht darin, dass AI Alter, Geschlecht und ob es sich um einen Repeater handelt, basierend auf dem Gesichtsbild des Besuchers schätzt, aber mit einem solchen schwarzen Gesichtsbild, egal wie gut das AI-Modell ist. Es ist nicht genau.

Es ist selten, dass eine solche Hintergrundbeleuchtung in einem tatsächlichen Geschäft auftritt, aber gelegentlich tritt das Phänomen auf, dass das Gesicht aufgrund der Hintergrundbeleuchtung dunkel wird. Darüber hinaus ist es bei der Installation schwer zu erkennen, da die Hintergrundbeleuchtung je nach Zeit möglicherweise ausgeht oder nicht.

Aus diesem Grund habe ich mich entschlossen zu glauben, dass die Schaffung eines Mechanismus zur Automatisierung der Erkennung von Hintergrundbeleuchtung für die Arbeit, die Studienprogrammierung und sogar die Bildverarbeitung nützlich sein könnte.

Wie ist der Zustand der Hintergrundbeleuchtung?

Wie ist der Zustand der Hintergrundbeleuchtung überhaupt? Versuchen Sie dazu, ein Histogramm des hintergrundbeleuchteten und des nicht hintergrundbeleuchteten Bildes zu zeichnen.

Erläuterungen zum Histogramm finden Sie unter OpenCV-Lernprogramm. Es ist einfach, aber grob gesagt zeigt es die Verteilung des Pixelwerts jedes Pixels im Bild. Der Pixelwert ist groß, wenn er hell ist, und klein, wenn er dunkel ist. Sie können also die Verteilung von Hell und Dunkel im Bild sehen, indem Sie das Histogramm betrachten.

(Ich habe es kurz geschrieben, aber ich habe ein Bildverarbeitungsbuch gelesen, um hierher zu gelangen, und mir wurde von einem Ingenieur gesagt, dass es eine praktische Bildverarbeitungs- / Lebenslaufbibliothek namens OpenCV gibt.)

Der Code, der das Histogramm zeichnet, ist unten.


import cv2
import numpy as np
from matplotlib import pyplot as plt

#Standardeingabe
filename = input()

#Bild laden
img = cv2.imread(filename)

#Zeichnen Sie ein Histogramm des Bildes
plt.hist(img.ravel(),256,[0,256]); plt.show()

Zunächst ein Histogramm des hintergrundbeleuchteten Bildes. Das Bild ist ein abgeschnittener Gesichtsteil des Fotos des Berges Fuji. Da das Gesicht des hintergrundbeleuchteten Bildes dunkel wird, wird es in Richtung des kleineren Pixelwerts vorgespannt.

Als nächstes folgt ein Histogramm des nicht hintergrundbeleuchteten Bildes. Ich bin vor 7 Jahren. Im Vergleich zum hintergrundbeleuchteten Bild weist dieses Bild gleichmäßig verteilte Pixelwerte auf.

Daher stellte ich die Hypothese auf, dass wenn der Median oder Durchschnittswert der Pixelwerte des Bildes kleiner als ein bestimmter Wert ist, dies als Hintergrundbeleuchtung beurteilt werden kann.

Es gibt auch eine Hintergrundbeleuchtung, die das Gesicht aufhellt

Als ich jedoch im Web nach hintergrundbeleuchteten Bildern suchte, stellte ich fest, dass es einen solchen Fall gab. (Ich hatte kein gutes Bild zur Hand, also habe ich es bei PIXTA gekauft.)

Im Gegenteil, dieses hintergrundbeleuchtete Bild macht das Gesicht zu hell, was die Genauigkeit der Beurteilung zu beeinträchtigen scheint.

Das Histogramm sieht folgendermaßen aus:

Dieses Mal ist der Pixelwert in Richtung des größeren vorgespannt. Es scheint, dass die Strategie, nach dem Betrag des Durchschnittswerts der zuvor erwähnten Pixelwerte zu urteilen, unmöglich ist. Was tust du jetzt?

Schauen wir uns noch einmal das Histogramm jedes Bildes an.

Betrachtet man dies, so haben die Bilder mit Hintergrundbeleuchtung in beiden Fällen eine verzerrte Verteilung der Pixelwerte im Vergleich zu Bildern ohne Hintergrundbeleuchtung. Also dachte ich, dass die Hintergrundbeleuchtung an dieser Tendenz gemessen werden könnte. Insbesondere scheint es gut zu sein, die Standardabweichung der Pixelwerte des Bildes zu berechnen (ein Wert, der den Grad der Datenstreuung angibt).

Beurteilung der Hintergrundbeleuchtung basierend auf der Standardabweichung des Pixelwerts des Bildes

Berechnen wir also die Standardabweichung des Pixelwerts des Bildes mit OpenCV.

Klicken Sie hier für den Code. OpenCV ist sehr praktisch, da Sie solche Berechnungen mit nur wenigen Codezeilen schreiben können.


from imutils import paths
import argparse
import cv2
import os
import numpy as np

#Standardeingabe
filename = input()

#Laden Sie das Bild.
img = cv2.imread(filename)

#Machen Sie das Bild Graustufen.
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#Berechnen Sie die Standardabweichung.
mean, stddev = cv2.meanStdDev(gray)
print('stddev',stddev)

Die Ergebnisse sind wie folgt.

Zunächst von einem Bild, das nicht beleuchtet ist. Die Standardabweichung betrug hier 55,6 </ font>.

Hintergrundbeleuchtung, die das nächste dunkle Gesicht macht. Die Standardabweichung betrug 32,0 </ font>.

Hintergrundbeleuchtung, die am Ende ein helles Gesicht macht. Die Standardabweichung betrug 36,7 </ font>.

Zusammenfassung, ・ Nicht hintergrundbeleuchtetes Bild: Die Standardabweichung beträgt 55,6 </ font> ・ Hintergrundbeleuchtetes Bild (dunkles Gesicht): Die Standardabweichung beträgt 32,0 </ font> ・ Hintergrundbeleuchtetes Bild (helles Gesicht): Die Standardabweichung beträgt 36,7 </ font>

Es scheint also, dass dies beurteilt werden kann, indem ein Schwellenwert zwischen 40 und 50 eingestellt wird und "ein Bild mit einer Standardabweichung unter dem Schwellenwert von hinten beleuchtet wird". Um es auf die Produktionsumgebung anzuwenden, gibt es noch viele Probleme, z. B. das Ausschneiden nur des Gesichts aus dem Bild sowie das Anpassen des Schwellenwerts. Dies ist jedoch eine Frage der Zeit.

Eindrücke habe ich versucht

Bis jetzt, als ich daran dachte, Programmieren zu studieren, musste ich ein technisches Buch kaufen und es von der ersten Seite lesen, und ich war von ungefähr 10 Seiten frustriert, aber diesmal. Als ich es tatsächlich mit einem Thema gemacht habe, war es leicht zu lernen, und vor allem hatte ich das Gefühl, dass es Spaß machen würde, daran zu arbeiten, einschließlich Versuch und Irrtum. Das Programmieren wird geübt und heißt Nambo.

Außerdem sagen mir die ABEJA-Ingenieure freundlich, dass es Dinge gibt, die ich nicht verstehe, und ich hatte erneut das Gefühl, dass es für Geschäftsmitglieder ein sehr gutes Umfeld ist, Technologie zu erwerben. Danke vielmals. Ich werde weiter studieren, indem ich mich für ein Thema entscheide.

Recommended Posts