±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜpython½çÃæ¿ª·¢ÖÐһЩ×î³£Óõĸ÷¸ö¿Ø¼þ²¼¾Ö¡¢ÊôÐԵľßÌåʵÏÖ¹ý³Ì£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊé £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼£¬ÍƼö¡£ |
|
ÏÂÃæÕâÕžÍÊÇʵÏÖµÄÕûÌå½çÃæµÄʾÒâͼ

»ù±¾¹¦ÄܽéÉÜ£º
µã»÷°´¼ünext video»áÔÚÏÂÃæµÄ½çÃæ²¥·ÅÊÓÆµ
ÊÓÆµ²¥·ÅÍê³ÉºóÔÚÔ¤²âÓï¾äºóµÄÎı¾¿òÖгöÏÖ¶Ô¸ÃÊÓÆµµÄÓïÒåÃèÊö
µã»÷°´¼ü±ê×¢Óï¾ä¿ÉÒÔÔÚÆäºóµÄÎı¾¿òÖÐչʾ¶Ô¸ÃÊÓÆµµÄ±ê×¢Óï¾ä
ÕâÆªÎÄÕÂÉæ¼°µÄ֪ʶµã»¹ÊÇͦ¶àµÄŶ£º
Tkinter»ù±¾¿Ø¼þʵÏÖ
TKinter¿Ø¼þÊôÐÔÓÅ»¯
TkinterʵÏÖÊÓÆµ²¥·Å
ThreadingÄ£¿éʵÏÖ¶àÏ̱߳à³Ì
1 ¾ßÌåʵÏÖ
1.0 µ¼Èë°ü¡¢´´½¨½çÃæÀà
from Tkinter
import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack() if __name__=='__main__':
app = Application()
# to do
app.mainloop() |
1.1 ÉèÖô°¿Ú±êÌâ¡¢½çÃæ×î´ó»¯
¾ßÌåµÄº¯ÊýÈçÏÂËùʾ£¬ÏÈ»ñµÃµ±Ç°ÆÁÄ»µÄ´óС£¬È»ºóÉèÖô°¿Ú´óС¡£
def window_init(self):
self.master.title('welcome to video-captioning
system')
width,height=self.master.maxsize()
self.master.geometry("{}x{}".format(width,
height)) |
ÔÚ__init__³õʼ»¯Öе÷Óü´¿É¡£
1.2 ʵÏÖ¸÷¸ö¿Ø¼þ²¼¾Ö
1) ²¼¾Ö·½Ê½½éÉÜ
²¼¾Ö¾ÍÊÇ¿ØÖƸ÷¸ö¿Ø¼þÔÚÕû¸ö½çÃæÖеÄλÖã¬Tkinter×ܹ²ÓУ³Öв¼¾Ö¹ÜÀíÆ÷£¬·Ö±ðÊÇpack gridºÍplace
ÕâÆª²©¿ÍÀï¸øÁ˺ÜÏêϸµÄ˵Ã÷£ºPython GUIÖ®tkinter²¼¾Ö¹ÜÀí
×ܽáһЩ×îÖØÒªµÄ¶«Î÷°É:
pack¿ÉÒÔËãÊÇ×î³£ÓõÄÒ»ÖÖ²¼¾Ö·½Ê½¡£¾ÍÊÇÏñÈÝÆ÷ÖдÓÉϵ½Ï£¨»òÕß´Ó×óµ½ÓÒ...£©ÒÀ´ÎÌí¼Ó×é¼þ¡£
gridºÜÐÎÏóµØÓÖ³ÆÎªÍø¸ñ²¼¾Ö¡£°Ñ¾ØÐνçÃæ·Ö³ÉÒ»¸ö¼¸Ðм¸ÁеÄÍø¸ñ¿é£¬ÕâÑù¾Í¿ÉÒÔ°Ñ×é¼þ·ÅÖÃÓÚÍø¸ñÖй̶¨µÄλÖÃ.
placeÕâÊÇÈýÖв¼¾ÖÖÐ×îÁé»îµÄÒ»ÖÖ·½Ê½¡£¸ù¾Ý×é¼þÔÚ½çÃæÖеÄ×ø±êÀ´Öƶ¨Î»Öã¬ËùÒÔ»á±È½ÏÁé»î£¬µ«Ò²Òâζ×Ų»ÄÇôÎȶ¨¡£
ËùÓеÄÈýÖÖ²¼¾Ö¶¼¿ÉÒÔʹÓÃÈÝÆ÷ÖзÅÈÝÆ÷µÄ·½·¨£¬ÕâÊǷdz£Ê¹ÓõÄÒ»¸ö¼¼ÇÉ¡£
2) ²¼¾ÖÉè¼ÆÍ¼
ÎÒÑ¡ÔñÈ«²¿ÓÃpackµÄ·½Ê½À´Íê³ÉÒ³ÃæµÄ²¼¾Ö¹¤×÷¡£
¾ßÌåµÄÉè¼ÆÍ¼ÈçÏÂËùʾ£º

ÎÒÒѾ¾¡Á¦È¥»ÁË£¬²»ÖªµÀÕâÑùÊDz»ÊÇÇå³þ¡«
×ܹ²´ÓÉϵ½Ï·ֳɣ³¸öFrame: fm1 ¡¡ fm2 ¡¡ fm3
µÚÒ»¸öFrameÀïÃæ°üº¬Ò»¸öÓÃÀ´ÏÔʾtitileµÄLabel
µÚÈý¸öFrameÀïÃæ°üº¬Ò»¸öÓÃÀ´ÏÔʾÊÓÆµÖ¡Í¼ÏñµÄLabel
µÚ¶þ¸öFrameÀïÃæÓÖ·Ö³É×óÓÒÁ½¸öСµÄÈÝÆ÷£ºfm2_left ¡¡ fm2_right
ÓұߵÄfm2_right¾Í°üº¬Ò»¸öÓÃÀ´²¥·ÅÊÓÆµµÄButtton
×ó±ßµÄfm2_leftÓÖ·ÖΪÉÏÏÂÁ½¸ö¸üСµÄÈÝÆ÷£ºfm2 _ left_
top ¡¡ fm2_lef_bottom
fm2_left_top fm2_lef_bottomÀïÃæ¶¼¸÷×Ô°üº¬Ò»¸ö°´Å¥ButtonºÍÒ»¸öÓÃÀ´ÏÔʾÎı¾µÄEntry
3) ²¼¾ÖʵÏÖ´úÂë
ÎÒÃÇÏȲ»¹Ü¾ßÌåµÄϸ½Ú£¬Ö±½Ó°Ñ¸÷¸ö¿Ø¼þµÄ²¼¾ÖλÖøø¶¨ÏÂÀ´£¬½çÃæÓÅ»¯µÄ²¿·Ö·Åµ½ºóÃæÈ¥ÔÙÌí¼Ó¡£
°´ÕÕÉÏÃæµÄ²¼¾ÖÉè¼ÆÍ¼£¬ÊÓÆµÇøÓòÔÝÇÒÓÃÒ»ÕÅÍ¼Æ¬Ìæ´ú£¬ÓÃpack()ʵÏÖ»ù±¾²¼¾ÖÈçÏ£º
def createWidgets(self):
# fm1
self.fm1=Frame(self)
self.titleLabel=Label(self.fm1,text='video -captioning
system')
self.titleLabel.pack()
self.fm1.pack(side= TOP)
# fm2
self.fm2=Frame(self)
self.fm2_left=Frame(self.fm2)
self.fm2_right=Frame(self.fm2)
self.fm2_left_top=Frame(self.fm2_left)
self.fm2_left_bottom=Frame(self.fm2_left)
self.predictButton=Button(self.fm2_left_top, text='predict
sentence')
self.predictButton.pack(side=LEFT)
self.predictEntry=Entry(self.fm2_left_top)
self.predictEntry.pack(side=LEFT)
self.fm2_left_top.pack(side=TOP) self.truthButton=Button(self.fm2_left_bottom, text='ground
truth')
self.truthButton.pack(side=LEFT)
self.truthEntry=Entry(self.fm2_left_bottom)
self.truthEntry.pack(side=LEFT)
self.fm2_left_bottom.pack(side=TOP) self.fm2_left.pack(side=LEFT)
self.nextVideoButton=Button(self.fm2_right,text ='next
video')
self.nextVideoButton.pack()
self.fm2_right.pack(side=LEFT) self.fm2.pack(side=TOP)
# fm3
self.fm3=Frame(self)
load = Image.open('/home/hl/Desktop/lovelyqian/me.jpg')
print (load)
render= ImageTk.PhotoImage(load)
self.img = Label(self.fm3,image=render)
self.img.image = render
self.img.pack()
self.fm3.pack(side=TOP) |
×¢: ͼƬµÄ´¦ÀíÒª¼ÓÈëÍ·Îļþ
from PIL import Image, ImageTk
×îÖÕЧ¹ûͼ£º

¶Ô±ÈÉÏÏÂÁ½ÕÅͼ£¬¿ÉÄÜÕâ¾ÍÊÇÀíÏëÓëÏÖʵµÄ²î¾à°É£¬¹þ¹þ¹þ¹þ
ÕâÀﻹֻÊÇʵÏÖÁ˲¼¾ÖµÄ¶¨ÒåºÍ»ù±¾Î»ÖõķÅÖã¬ËäÈ»ÕæµÄºÜ³ó£¬µ«ÊDz»Òª×ż±£¬½ÓÏÂÀ´ÎÒÃǾͿÉÒÔÔÚÕâ¸ö»ù´¡ÉÏ×öһЩ¿Ø¼þ´óСµÄÐÞ¸ÄÒÔ¼°ÆäËûµÄ½çÃæÃÀ»¯¹¤×÷¡£
4) ¿Ø¼þÊôÐÔÉèÖü°½çÃæÓÅ»¯
ÉèÖÃÖ÷´°¿Ú±³¾°ÎªºÚÉ«
ÀûÓà FrameµÄbgÊôÐÔ
Òª¼ÇµÃpack()µÄʱºòÉèÖÃΪȫÀ©³ä
ÒÔ×î´óµÄµ×´°¿ÚΪÀý£º
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master,bg='black')
self.pack(expand=YES,fill=BOTH) |
¸÷¸ö¿Ø¼þÊôÐÔÉèÖÃ
±¾À´´òËãÒ»µãµã¼Ç¼¾ßÌåʵÏֵĹý³ÌµÄ£¬µ«·¢ÏÖʵÔÚÊÇÌ«Âé·³ÁË¡£
Ö÷Òª¾ÍÊDZßѧ±äÓ㬲ο¼×ÊÁ϶¼ÔÚÏÂÃæÁгöÀ´ÁË¡£
¸Ä¶¯Á˳£ÓõÄһЩÊôÐÔ£¬±ÈÈç×ÖÌå´óС¡¢×ÖÌåǰ¾°É«¡¢ºó¾°É«¡¢°´Å¥´óСµÈµÈ¡£
¾ßÌåµÄʵÏÖ´úÂëÏÈÓÃͼƬµÄ·½Ê½·ÅÔÚÕâÀÔÚ×îºó»á¸ø³öÍêÕûµÄ´úÂë¡£

¸ÐÐËȤµÄ»°¸úÉÏÃæÄǶδúÂë¶Ô±ÈһϾͿÉÒԺܷ½±ãµÄÖªµÀ¸÷¸öÊôÐԵĿØÖÆ·½·¨£¬ÕâÀï¾Í²»ÔÙÂÞÁÐÁË¡£
×îºóµÄʵÏÖЧ¹û£º

²î²»¶àÏÈÕâÑù°É£¬È¥³Ô¸öÎç·¹£¬ÏÂÎç»ØÀ´¼ÌÐøÐ´¹¦Äܺ¯Êý¡«¡«¡«
1.3 ¸÷¸öº¯Êý¹¦ÄÜ
1) ÏÔʾÎı¾
ÕâÀïÖ»ÐèҪѧϰһÏÂEntryÕâ¸ö¿Ø¼þ¡£
EntryÊÇÓÃÀ´½ÓÊÕºÍÏÔʾ×Ö·û´®µÄ¿Ø¼þ¡£
Ö÷ÒªÁ˽â½ÓÊÜÎÄ×Ö¡¢·¢ËÍÎÄ×Ö¡¢Çå³ýÎÄ×ÖÕ⣳¸ö¹¦ÄܾͿÉÒÔÁË¡£
myEntry.get()»ñÈ¡ÄÚÈÝ
myEntry.insert(10,"hello")ÔÚλÖÃ10´¦£¬Ìí¼ÓÄÚÈÝ
myEntry.delete(first,last=None)ɾ³ý´Ó ¡°first¡± µ½ ¡°last¡±
Ö¸¶¨·¶Î§ÄÚµÄ×Ö·û. ʹÓà delete(0, END)¿ÉÒÔɾ³ý Entry ¿Ø¼þÒÑÊäÈëµÄÈ«²¿×Ö·û.
2) °´Å¥´¥·¢
Ö»ÐèÒªÔÚ°´Å¥ÖÐÌí¼ÓÊôÐÔcommand¼´¿É¡£
ÒÔµã»÷predictButton°´Å¥ÊµÏÖ½«Îı¾ÏÔʾµ½ºóÃæµÄÎı¾¿òÖÐΪÀý£º
#...
self.predictButton=Button(self.fm2_left_top,text='predict
sentence',bg='#FF4081',fg='white',font=('΢ÈíÑźÚ',36),width='16',command=self.output_predict_sentence)
def output_predict_sentence(self):
predicted_sentence_str='hello world.'
self.predictEntry.delete(0,END)
self.predictEntry.insert(0,predicted_sentence_str) |
ÕâÑùÿ´Îµã»÷°´¼ü¾Í»áÏȰѿò¿òÄÚµÄÎÄ×ÖÇå¿Õ£¬È»ºóÊä³öÄãÖ¸¶¨µÄÎı¾¡£

3) ÊÓÆµ²¥·Å
Õâ¸ö¿ÉÄÜÊÇ×îÄѵÄÒ»¸ö²¿·ÖÁËÄØ¡«
TkinterÊÇûÓÐÖ§³ÖÊÓÆµ²¥·ÅµÄÔÉú¿Ø¼þµÄ£¬°Ù¶ÈÕÒÁ˺þö¼Ã»ÓÐÕÒµ½½â¾ö·½°¸£¬¸ÐлGoogle´ó·¨£¬ÔÚÕâÀïÕÒµ½ÁËÒ»¸ö·Ç³£ºÃµÄÀý×Ó£¬»¹ºÃľÓÐ·ÅÆú¡«¡«
Õâ¸öÀý×ÓʵÏÖµÄÊÇ´ÓÉãÏñÍ·»ñÈ¡ÊÓÆµÁ÷£¬È»ºó·ÅÔÚTkinterʵÏÖµÄGUI´°¿ÚÖУ¬°´Å¥¿ÉÒÔʵÏÖÊÓÆµ½ØÆÁ²¢±£´æµÄЧ¹û¡£
¶Ô´úÂë×öÁ˼ò»¯Ö®ºóʵÏÖ½«ÊÓÆµ²¥·ÅÔÚTKinter´°¿ÚÖдúÂëÈçÏÂËùʾ£º
from __future__
import print_function
from PIL import Image,ImageTk
import Tkinter as tki
import threading
import imutils
import cv2
import time
import imageio
class videoPlayer():
def __init__(self):
self.frame = None
self.thread = None
self.stopEvent = None
# initialize the root window and image panel
self.root = tki.Tk()
self.panel = None
# start a thread that constantly pools the
video sensor for
# the most recently read frame
self.stopEvent = threading.Event()
self.thread = threading.Thread(target=self.videoLoop,
args=())
self.thread.start()
def videoLoop(self):
# keep looping over frames until we are instructed
to stop
video_path='/home/hl/Desktop/lovelyqian/CV_Learning/ video_to_sequence/video_to_sequence-master/data/ youtube_videos/_0nX-El-ySo_83_93.avi'
video=imageio.get_reader(video_path,'ffmpeg')
for frame in video:
self.frame = imutils.resize(frame, width=300)
image = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
image = Image.fromarray(image)
image = ImageTk.PhotoImage(image)
# if the panel is not None, we need to initialize
it
if self.panel is None:
self.panel = tki.Label(image=image)
self.panel.image = image
self.panel.pack(side="left", padx=10,
pady=10)
# otherwise, simply update the panel
else:
self.panel.configure(image=image)
self.panel.image = image time.sleep(0.02) myVideoPLayer = videoPlayer()
myVideoPLayer.root.mainloop() |
¶ÔÉÏÃæµÄ´úÂëÔÙ×öÒ»¸öÐÞ¸ÄÕûºÏ¾Í¿ÉÒÔÁË¡£
4) ¶àÏß³ÌÎÊÌâ
ÒòΪҪÊÓÆµÊÓÆµ²¥·ÅµÄ¹¦ÄÜ£¬ËùÒÔÎÒÃÇ»¹ÒªÑ§Ï°Ò»ÏÂpythonµÄ¶àÏ̡߳£
Ò²²»ÊǺÜÄÑ£¬Ïë¾ßÌåÁ˽âµÄ¿ÉÒÔµã»÷ÎÄÄ©µÄ²Î¿¼×ÊÁÏ¡£
import threadingµ¼ÈëÏß³ÌÄ£¿é
self.thread=threading.Thread ( target=self.play
_ next _ video, args = ())¾Í¶¨ÒåºÃÁËÏȵÄÏ̡߳£
targetÖ¸Ã÷¸ÃÏß³ÌÆô¶¯ºó»áµ÷ÓÃÄĸöº¯Êý
self.thread.start()Æô¶¯¸ÃÏß³Ì
µ±º¯ÊýÖ´ÐнáÊøÊ±£¬¸ÃÏ߳̾Í×Ô¶¯½áÊø
ËùÒÔÿ´ÎÏëÒªÓöàÏß³ÌÖ´ÐÐÊÓÆµ²¥·ÅµÄʱºò£¬Ö»ÒªÉú³ÉÒ»¸ö target
= self . paly _ next_videoµÄÏ̼߳´¿É¡£
ÄÇôÄܲ»ÄÜÖ»¶¨ÒåÒ»´ÎỊ̈߳¬È»ºóÿ´ÎstartËüÄØ£¬´ð°¸ÊDz»ÄܵĹþ¹þ¹þ¹þ¡£
2 ÍêÕû´úÂë
×îºóÒª·Å´óÕÐÀ²£¬×¼±¸ºÃÁËÂð£¿
ÍêÕûµÄ´úÂë¶¼ÔÚÏÂÃæÁË£¬ÓÐÐèÒª×ÔȡŶ¡£
#-*- coding:utf-8
-*-
from Tkinter import *
from PIL import Image, ImageTk
import threading
import imageio
import imutils
import time
import cv2
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master,bg='black')
self.pack(expand=YES,fill=BOTH)
self.window_init()
self.createWidgets()
def window_init(self):
self.master.title('welcome to video-captioning
system')
self.master.bg='black'
width,height=self.master.maxsize()
self.master.geometry("{}x{}".format(width,
height))
def createWidgets(self):
# fm1
self.fm1=Frame(self,bg='black')
self.titleLabel=Label(self.fm1,text="video-captioning
system",font=('΢ÈíÑźÚ',64),fg = "white",bg='black')
self.titleLabel.pack()
self.fm1.pack(side= TOP,expand=YES,fill='x',pady=20) # fm2
self.fm2=Frame(self,bg='black')
self.fm2_left=Frame(self.fm2,bg='black')
self.fm2_right=Frame(self.fm2,bg='black')
self.fm2_left_top=Frame(self.fm2_left,bg='black')
self.fm2_left_bottom=Frame(self.fm2_left,bg='black') self.predictEntry=Entry(self.fm2_left_top,font= ('΢ÈíÑźÚ',24),width='72',fg='#FF4081')
self.predictButton=Button(self.fm2_left_top,text=' predict
sentence',bg='#FF4081',fg='white',font= ('΢ÈíÑźÚ',36),width='16',command=self.output_predict_sentence)
self.predictButton.pack(side=LEFT)
self.predictEntry.pack(side=LEFT,fill='y',padx=20)
self.fm2_left_top.pack(side=TOP,fill='x') self.truthEntry=Entry(self.fm2_left_bottom,font= ('΢ÈíÑźÚ',24),width='72',fg='#22C9C9')
self.truthButton=Button(self.fm2_left_bottom,text=' ground
truth',bg='#22C9C9',fg='white',font= ('΢ÈíÑźÚ',36), width='16',command=self.output_ground_truth)
self.truthButton.pack(side=LEFT)
self.truthEntry.pack(side=LEFT,fill='y',padx=20)
self.fm2_left_bottom.pack(side=TOP,pady=10,fill='x') self.fm2_left.pack(side=LEFT,padx=60,pady=20, expand=YES,fill='x')
self.nextVideoImg= ImageTk.PhotoImage(file =
'/home/hl/ Desktop/lovelyqian/nextVideo.png')
self.nextVideoButton=Button(self.fm2_right,image=self. nextVideoImg,text='next
video',bg='black',command=self. start_play_video_thread)
self.nextVideoButton.pack(expand=YES,fill=BOTH)
self.fm2_right.pack(side=RIGHT,padx=60)
self.fm2.pack(side=TOP,expand=YES,fill="x")
# fm3
self.fm3=Frame(self,bg='black')
load = Image.open('/home/hl/Desktop/lovelyqian/me.jpg')
initIamge= ImageTk.PhotoImage(load)
self.panel = Label(self.fm3,image=initIamge)
self.panel.image = initIamge
self.panel.pack()
self.fm3.pack(side=TOP,expand=YES,fill=BOTH,pady=10) def output_predict_sentence(self):
predicted_sentence_str='hello world.'
self.predictEntry.delete(0,END)
self.predictEntry.insert(0,predicted_sentence_str) def output_ground_truth(self):
ground_truth='this is ground truth.'
self.truthEntry.delete(0,END)
self.truthEntry.insert(0,ground_truth) def start_play_video_thread(self):
self.thread=threading.Thread(target=self .play_next_video,args=())
self.thread.start() def play_next_video(self):
self.predictEntry.delete(0,END)
self.truthEntry.delete(0,END)
# to play video
self.video_path='/home/hl/Desktop/lovelyqian /CV_Learning/video_to_sequence/video_to_sequence-master/data/youtube _videos/_0nX-El-ySo_83_93.avi'
self.video=imageio.get_reader(self.video_path, 'ffmpeg')
for self.videoFrame in self.video:
self.videoFrame=imutils.resize(self.videoFrame, width=1760, height=1080)
# to do
self.image=cv2.cvtColor(self.videoFrame,cv2. COLOR_BGR2RGB)
self.image=Image.fromarray(self.image)
self.image=ImageTk.PhotoImage(self.image) self.panel.configure(image=self.image)
self.panel.image=self.image time.sleep(0.02) if __name__=='__main__':
app = Application()
# to do
app.mainloop()
|
|