みなさまにご協力頂き、無事作りたいものを作ることができました。
これをスマホで使いたいのですが、もっとも簡単にスマホで利用できるようにする方法をご教示頂きたいです。
ウェブサイトにスマホからアクセスさえできれば良いのですが、
何から始めれば良いでしょうか。
PytoやPythonistaも考えたのですが、
コードの書き直しがいずれも必要になるのと、他の人に共有できないため、
何か良い方法はないか探しております。
もっとも簡単でお手頃なウェブアプリ化方法を教えてください。
宜しくお願いします。
Python
1 2#下記のソースコードを最も簡単な方法でウェブアプリ化したいです 3 4import tkinter as tk 5from tkinter import ttk 6import cv2 7import PIL.Image, PIL.ImageTk 8from tkinter import font 9from tkinter import filedialog 10import time 11 12 13class Application(tk.Frame): 14 def __init__(self,master, video_source=0): 15 super().__init__(master) 16 17 self.master.geometry("1250x1000") 18 self.master.title("Tkinter with Video Streaming and Capture") 19 20 # --------------------------------------------------------- 21 # Font 22 # --------------------------------------------------------- 23 self.font_frame = font.Font( family="Meiryo UI", size=15, weight="normal" ) 24 self.font_btn_big = font.Font( family="Meiryo UI", size=20, weight="bold" ) 25 self.font_btn_small = font.Font( family="Meiryo UI", size=15, weight="bold" ) 26 27 self.font_lbl_bigger = font.Font( family="Meiryo UI", size=45, weight="bold" ) 28 self.font_lbl_big = font.Font( family="Meiryo UI", size=30, weight="bold" ) 29 self.font_lbl_middle = font.Font( family="Meiryo UI", size=15, weight="bold" ) 30 self.font_lbl_small = font.Font( family="Meiryo UI", size=12, weight="normal" ) 31 32 # --------------------------------------------------------- 33 # Open the video source 34 # --------------------------------------------------------- 35 36 self.vcap = cv2.VideoCapture( video_source ) 37 self.width = self.vcap.get( cv2.CAP_PROP_FRAME_WIDTH ) 38 self.height = self.vcap.get( cv2.CAP_PROP_FRAME_HEIGHT ) 39 40 # --------------------------------------------------------- 41 # Widget 42 # --------------------------------------------------------- 43 44 self.create_widgets() 45 46 # --------------------------------------------------------- 47 # Canvas Update 48 # --------------------------------------------------------- 49 50 self.delay = 15 #[mili seconds] 51 self.update() 52 53 54 def create_widgets(self): 55 56 #Frame_Camera 57 self.frame_cam = tk.LabelFrame(self.master, text = 'Camera', font=self.font_frame) 58 self.frame_cam.place(x = 10, y = 10) 59 self.frame_cam.configure(width = self.width -90, height = self.height - 50) 60 self.frame_cam.grid_propagate(0) 61 62 #Canvas 63 self.canvas1 = tk.Canvas(self.frame_cam) 64 self.canvas1.configure( width= self.width -90 , height=self.height - 100) 65 self.canvas1.grid(column= 0, row=0,padx = 10, pady=10) 66 67 # Frame_Button 68 self.frame_btn = tk.LabelFrame( self.master, text='Control', font=self.font_frame ) 69 self.frame_btn.place( x=10, y=680 ) 70 self.frame_btn.configure( width=self.width - 90, height=120 ) 71 self.frame_btn.grid_propagate( 0 ) 72 73 #Snapshot Button 74 self.btn_snapshot = tk.Button( self.frame_btn, text='Snapshot', font=self.font_btn_big) 75 self.btn_snapshot.configure(width = 15, height = 1, command=self.press_snapshot_button) 76 self.btn_snapshot.grid(column=0, row=0, padx=30, pady= 10) 77 78 # Close Button 79 self.btn_close = tk.Button( self.frame_btn, text='Close', font=self.font_btn_big ) 80 self.btn_close.configure( width=15, height=1, command=self.press_close_button ) 81 self.btn_close.grid( column=1, row=0, padx=20, pady=10 ) 82 83 # テキストボックスの作成 84 self.textBox1 = tk.Entry(width=150) # 入力用テキストボックス 85 self.textBox1.place(x=37, y=750) # テキストボックス位置指定 86 87 def update(self): 88 #Get a frame from the video source 89 _, frame = self.vcap.read() 90 91 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 92 self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame)) 93 94 #self.photo -> Canvas 95 self.canvas1.create_image(0,0, image= self.photo, anchor = tk.NW) 96 97 self.master.after(self.delay, self.update) 98 99 def analyze_img(self, pic_name): 100 101 img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE) 102 result = '実装中' 103 return result 104 105 106 def press_snapshot_button(self): 107 # Get a frame from the video source 108 _, frame = self.vcap.read() 109 frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 110 pic_name = "frame-" + time.strftime( "%Y-%d-%m-%H-%M-%S")+ ".jpg" 111 cv2.imwrite(pic_name, cv2.cvtColor( frame1, cv2.COLOR_BGR2RGB ) ) 112 113 result = self.analyze_img(pic_name) 114 self.textBox1.delete(0,tk.END) 115 self.textBox1.insert(1, result) 116 117 def press_close_button(self): 118 self.master.destroy() 119 self.vcap.release() 120 121def main(): 122 root = tk.Tk() 123 app = Application(master=root)#Inherit 124 app.mainloop() 125 126if __name__ == "__main__": 127 main()
お手頃な方法は無いと思います。
Webアプリ化するなら、Django、FlaskなどのWebフレームワークを使う、
スマホアプリにするなら、アプリはSwift、Kotlin、Flutterなどで作って、どうしてもPythonで処理させたいことがあれば、サーバーを立てて、アプリとは別で処理させるのが良いと思います。
takutakuya 様
お世話になっております。
質問の意図を汲み取り、的確な助言を頂き、ありがとうございます。
フレームワーク、サーバーあたりが全く初心者で途方に暮れておりましたので、とても助かりました。
教えて頂いた情報を元に、どう実装すべきかから検討するようにします。
ありがとうございました!
回答1件
あなたの回答
tips
プレビュー