Lassen Sie uns einen Fotorahmen mit Raspeye implementieren. Fotorahmen ist ein verwendetes Thema in Razzpie ~~ nth Abkochung ~~, aber ich war mit dem herkömmlichen unzufrieden.
Schließlich kann eine sorgfältige Auswahl der Fotos problematisch sein. Zum Beispiel beim Anzeigen von Fotos, die von einem Freund gesendet wurden, oder Fotos von einer Kamera in einem Fotorahmen
・ Wenn Sie sorgfältig auswählen und einlegen, wird es schwierig, oder die Anzahl der Blätter wird gering sein, und Sie werden es bald leid sein, es zu sehen. ・ Wenn Sie im Gegenteil alles hineinschieben, werden fehlerhafte Fotos aufgenommen und ein peinliches Foto angezeigt.
Es gibt ein Dilemma. Um dieses Problem zu lösen, erstellen wir einen Fotorahmen, der die Anzeige von Fotos optimiert.
Wenn der Benutzer mag ・ Überspringen Sie das Foto ・ Reduzieren Sie die Anzeigefrequenz des Fotos ・ Zeigen Sie das Foto nie wieder an
Sie können die Operation ausführen. Die so eingestellte Anzeigefrequenz wird gespeichert und aktualisiert. Mit anderen Worten, das Konzept besteht darin, alle Fotos einzulegen und anzupassen, während Sie sie verwenden.
Der gesamte Quellcode wird am Ende der Seite veröffentlicht.
・ Himbeer-Pi Dieses Mal habe ich Razpai 3 Modell B verwendet, das ich zu Hause hatte. Jede Generation ist akzeptabel.
・ 3,5-Zoll-Display Wird zum Anzeigen von Fotos verwendet. Als ich bei Amazon ungefähr 2000 Yen kaufte, war der Treiber alt und konnte nicht benutzt werden ... Wenn ein Treiber eines anderen Unternehmens installiert ist, wird nur der Bildschirm angezeigt, aber das Touchpanel ist nicht mehr aktiv.
Wenn Sie nur Fotos anzeigen möchten
fbi image.jpg
Es ist genug. In Anbetracht der Realisierung detaillierter Spezifikationen und der Erweiterbarkeit wie der Zusammenarbeit mit der Außenwelt werde ich diesmal alles in Python schreiben. Wenn Sie mit Bildern umgehen, sind OpenCV usw. wichtig, aber dieses Mal verwenden wir Pygame, ein Modul für Spiele.
Wie für diese Spezifikation ① Bilder automatisch von DropBox erfassen (nicht implementiert) ② Zeigen Sie Bilder im Diashow-Format an ③ Verwenden Sie die Tasten, um Bilder zu überspringen, die Anzeigefrequenz zu verringern und sie nie wieder anzuzeigen. ④ Speichern und aktualisieren Sie die eingestellte Frequenz Wird besorgt. Ich wähle hauptsächlich Pygame für ③.
Herstellung
Um das Bild anzuzeigen, müssen Sie zunächst ein Fenster erstellen.
import pygame
from pygame.locals import *
import sys
pygame.init()
screen =pygame.display.set_mode((400,300))
pygame.mouse.set_visible(False)
pygame.display.set_caption("Photo")
Initialisieren Sie mit pygame.init ()
und
Geben Sie die Bildschirmgröße mit "display.set_mode ()" an.
(Es wird Vollbild angezeigt, indem "FULL SCREEN" als Argument eingefügt wird. Es scheint jedoch besser, dies nicht während des Debuggens zu tun, da es schwierig ist, den Vorgang abzuschließen, wenn im Vollbildmodus ein Fehler auftritt.)
Es ist umständlich, einen Mauszeiger als Fotorahmen zu haben. Löschen Sie ihn daher mit "pygame.mouse.set_visible (False)".
img =pygame.image.load("file.jpg ")
img = pygame.transform.scale(img1,(400,300))
rectimg = img.get_rect()
screen.fill((0,0,0))
screen.blit(img,rect_img)
pygame.display.update()
Dies ist der Darstellungsteil des Bildes.
Sie können ein Bild mit image.load
laden.
Geben Sie die RGB-Hintergrundfarbe mit "screen.fill" an. Diesmal ist es schwarz.
Fügen Sie das Bild mit "screen.blit" ein und aktualisieren und zeigen Sie den Bildschirm mit dem letzten "display.update ()" an.
Das Bild kann durch den obigen Vorgang angezeigt werden. Lassen Sie uns nun die Diashow implementieren.
Was ist eine Diashow? · Messzeit ・ Laden Sie nach einiger Zeit ein neues Bild und zeigen Sie es an
Das ist der Prozess. Speichern Sie daher die Zeit, in der das Bild angezeigt wird.
start_time = pygame.time.get_ticks()
Und während Sie die Schleife von while (1) drehen
time_since_start = pygame.time.get_ticks() - start_time
if time_since_start>10000:
break
Es kann realisiert werden durch.
Sie können die Zeit mit pygame.time.get_ticks ()
abrufen und die Einheit ist ms. In diesem Beispiel wird sie alle 10 Sekunden umgeschaltet. (Tatsächlich wird die Ladezeit des Fotos hinzugefügt.)
Ermöglicht das Umschalten, ohne 10 Sekunden zu warten. Insbesondere ist es eine Funktion, das nächste Bild anzuzeigen, wenn die Taste gedrückt wird. Da es diesmal keine einfache physische Taste gab, werde ich eine Tastatur anschließen und verwenden.
Auch die Funktion zum Beenden kann nicht so ausgeführt werden, wie sie ist. Wenn ESC gedrückt wird, wird das Programm daher beendet.
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.key == K_z:
flugloop = False
Zuerst wird das aufgetretene Ereignis in einer Schleife abgerufen, und wenn es sich um einen Tastendruck handelt, wird der Prozess ausgeführt. K_ESCAPE ist der ESC-Schlüssel und K_z ist der z-Schlüssel. Auf diese Weise können Sie das Verhalten implementieren, wenn eine beliebige Taste mit K_a usw. gedrückt wird.
Wenn es sich um die ESC-Taste handelt, wird sie sofort in der if-Anweisung beendet. Wenn die z-Taste gedrückt wird, wird das Sprung-Flag gesetzt und das nächste Bild wird verschoben.
Nachdem Sie eine Diashow haben, können Sie die Verarbeitung für Fotos hinzufügen, die weniger häufig angezeigt werden sollen oder die Sie nicht mehr sehen möchten. In [Bild anzeigen](Bild anzeigen) wurde der Pfad angegeben und gelesen. Der gelesene Teil wird gewichtet und zufällig geändert.
photonum = list(range(1,len(w)+1))
filenum = random.choices(photonum,weight)
filename = str(filenum[0]) + ".jpg "
pygame.image.load(filename)
Benennen Sie das Bild im Voraus mit 1.jpg, 2.jpg usw.
Hier ist die zweite Zeile "random.choices" die Funktion, die durch Gewichtung des Zufalls ausgewählt werden kann.
photonum
ist eine Liste, die 1 zur Anzahl der Blätter enthält
weight
enthält das Gewicht jedes Bildes als ganzzahligen Wert.
Wenn diese beiden an "random.choices" übergeben werden, wird entsprechend ihrem Gewicht aus "photonum" ausgewählt.
Dann wird die ausgewählte Bilddatei geladen.
Alles was Sie tun müssen, ist dieses "Gewicht" zu bedienen.
Speichern Sie dieses Mal "Gewicht" in einer Textdatei, die durch Zeilenumbrüche getrennt ist. Außerdem ist der Anfangswert des Gewichts ein ganzzahliger Wert von 10.
data = open('data.txt')
weight =[]
for line in data:
weight.append(int(line))
data.close()
Dies liest die Gewichte Zeile für Zeile aus "data.txt" und speichert sie in "weight".
Verwenden Sie nun den zuvor veröffentlichten KEYDOWN.
if event.key == K_x:
flugloop =False
weight[filenum-1] = 0
In diesem Fall wird das Gewicht auf 0 gesetzt, wenn x gedrückt wird, und das Foto wird nie wieder angezeigt. Durch Verringern auf die gleiche Weise wird die Häufigkeit verringert, mit der das Foto angezeigt wird.
Nun, diese Liste geht natürlich verloren, wenn sie fertig ist. Speichern wir es also, indem wir es in data.txt
schreiben.
Fügen Sie dem Verhalten des ESC-Schlüssels hinzu.
if event.key == K_ESCAPE
f = open("data.txt",'w')
for i in weight:
f.write(str(i))
f.write("\n")
f.close()
pygame.quit()
sys.exit()
Auf diese Weise werden die Einstellungen beim nächsten Start übernommen.
#photo.py
import pygame
from pygame.locals import *
import sys
import random
def get_image(w=[]):
photonum = list(range(1,len(w)+1))
filenum = random.choices(photonum,w) #Bilder nach dem Zufallsprinzip extrahieren
filename = str(filenum[0]) + ".jpg "
return pygame.image.load(filename).convert_alpha(),filenum[0] #Der Rückgabewert ist das Bild und seine ID
def main():
data = open('data.txt') #Gewichte laden
weight =[]
for line in data:
weight.append(int(line))
data.close()
while(1):#Zeigen Sie ein Bild an
pygame.init()
screen =pygame.display.set_mode((400,300),FULLSCREEN)
pygame.mouse.set_visible(0)
pygame.display.set_caption("test")
x=get_image(weight)
img1 = x[0]
filenum = x[1]
img2 = pygame.transform.scale(img1,(400,300))
rect_img2 = img2.get_rect()
screen.fill((0,0,0))
screen.blit(img2,rect_img2) #Bildschirm
pygame.display.update() #Bildschirmaktualisierung
start_time = pygame.time.get_ticks() #Startzeitmessung
flugloop = True
while(1): #Schleife zum Akzeptieren von Operationen
time_since_start = pygame.time.get_ticks() - start_time #Zeitmessung
if time_since_start>10000: #Pause nach 10 Sekunden,Zur nächsten Bildanzeige
break
if flugloop ==False: #Pause, wenn markiert,Zur nächsten Bildanzeige
break
for event in pygame.event.get(): #Empfang des Betriebs
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE: #Wenn esc gedrückt wird
f = open("data.txt",'w') #Anzeigefrequenz speichern
for i in weight:
f.write(str(i))
f.write("\n")
f.close()
pygame.quit() #Das Ende des Programms
sys.exit()
if event.key == K_SPACE: #Wenn Sie die Leertaste drücken, reduzieren Sie das Gewicht und fahren Sie mit dem nächsten Bild fort
flugloop = False
if weight[filenum-1] >3:
weight[filenum-1] -=1
if event.key == K_x: #Wenn die x-Taste gedrückt wird, wird das Gewicht auf 0 gesetzt und nie wieder angezeigt.
flugloop =False
weight[filenum-1] = 0
if event.key == K_z:
flugloop =False
main()
Implementierung der automatischen Fotoaddition von DropBox. Installation von physischen Tasten. Wenn Sie eine Webcam verwenden, um das Gewicht der Fotos, auf die Sie besonders achten, zu erhöhen und sie gut anzuzeigen, ist es einfacher, das Gewicht der Anzeigefrequenz anzupassen.
Recommended Posts