در این مطلب، ویدئو ساخت طبقه بندی کننده دوربین در پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:47:11
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:04,260 –> 00:00:09,840
[موسیقی]
2
00:00:09,840 –> 00:00:11,280
چه خبر است بچه ها به این ویدیو خوش آمدید
3
00:00:11,280 –> 00:00:12,799
در قسمت امروز ما قصد داریم
4
00:00:12,799 –> 00:00:14,799
یک طبقه بندی کننده دوربین بسازیم که
5
00:00:14,799 –> 00:00:16,480
برنامه ای است که چندی پیش در github آپلود کردم،
6
00:00:16,480 –> 00:00:17,119
7
00:00:17,119 –> 00:00:19,039
می توانید آن را در
8
00:00:19,039 –> 00:00:20,320
github.com
9
00:00:20,320 –> 00:00:22,160
neural nine بررسی کنید.
10
00:00:22,160 –> 00:00:24,000
مخزن طبقهبندی دوربین را در اینجا ببینید
11
00:00:24,000 –> 00:00:26,000
و اساساً فقط یک اسکریپت یا یک
12
00:00:26,000 –> 00:00:27,680
برنامه کاربردی یک برنامه پایتون است که
13
00:00:27,680 –> 00:00:29,279
به شما امکان میدهد با وبکم خود عکس بگیرید
14
00:00:29,279 –> 00:00:30,640
15
00:00:30,640 –> 00:00:33,200
و آنها را به دو کلاس طبقهبندی کنید، بنابراین
16
00:00:33,200 –> 00:00:34,320
میتوانید به عنوان مثال بگویید
17
00:00:34,320 –> 00:00:37,280
کلاس یک هر زمان که یک
18
00:00:37,280 –> 00:00:39,760
نشانگر سبز را در آن نگه دارید. وبکم و کلاس
19
00:00:39,760 –> 00:00:42,480
ام دو زمانی است که یک لیوان قهوه
20
00:00:42,480 –> 00:00:44,079
را در وبکم نگه میدارید یا هر چیز دیگری،
21
00:00:44,079 –> 00:00:45,360
و کاری که با این ابزار انجام میدهید این است که در
22
00:00:45,360 –> 00:00:47,520
اصل یک دسته عکس میسازید،
23
00:00:47,520 –> 00:00:49,520
مثلاً یک نشانگر سبز رنگ
24
00:00:49,520 –> 00:00:50,559
را در وبکم خود نگه
25
00:00:50,559 –> 00:00:52,239
میدارید و سپس کلاس یک کلاس را کلیک میکنید. یک
26
00:00:52,239 –> 00:00:53,920
کلاس یک همیشه، بنابراین شما چند نمونه عکس ارائه می دهید،
27
00:00:53,920 –> 00:00:55,199
28
00:00:55,199 –> 00:00:56,960
سپس یک دسته فنجان قهوه
29
00:00:56,960 –> 00:00:58,800
را
30
00:00:58,800 –> 00:01:00,960
در داخل وب کم خود نگه می دارید و نمونه های کلاس دو را ارائه می دهید
31
00:01:00,960 –> 00:01:01,840
32
00:01:01,840 –> 00:01:03,840
و سپس این نمونه ها یک بار یک بار هستند.
33
00:01:03,840 –> 00:01:05,199
شما به اندازه کافی از آنها دارید، فقط روی
34
00:01:05,199 –> 00:01:05,920
35
00:01:05,920 –> 00:01:07,840
قطار کلیک می کنید و همه آنها را آموزش می دهید و سپس مرکز خرید،
36
00:01:07,840 –> 00:01:09,439
37
00:01:09,439 –> 00:01:12,240
آینده را پیش بینی می کند، مثال آینده، بنابراین می توانید
38
00:01:12,240 –> 00:01:13,520
بعد از آن عکس های جدیدی بگیرید
39
00:01:13,520 –> 00:01:15,119
و می توانید بگویید خوب، پیش بینی کنید این
40
00:01:15,119 –> 00:01:16,240
چیست و به شما می گوید که
41
00:01:16,240 –> 00:01:17,840
این یکی است. به عنوان مثال لیوان قهوه یا یک نشانگر سبز رنگ
42
00:01:17,840 –> 00:01:19,040
است
43
00:01:19,040 –> 00:01:20,640
و من می خواهم به شما نشان دهم که چگونه به
44
00:01:20,640 –> 00:01:22,080
نظر می رسد در یک ثانیه
45
00:01:22,080 –> 00:01:23,119
ما
46
00:01:23,119 –> 00:01:24,400
برنامه ای را اجرا می کنیم که
47
00:01:24,400 –> 00:01:25,600
قرار است کمی با آن بازی کنیم و بعد از
48
00:01:25,600 –> 00:01:27,040
آن می خواهیم در مورد
49
00:01:27,040 –> 00:01:28,799
نحوه ساخت این برنامه از ابتدا صحبت کنیم،
50
00:01:28,799 –> 00:01:31,200
بنابراین اجازه دهید همین الان وارد آن شویم
51
00:01:31,200 –> 00:01:32,640
تا اسکریپت را
52
00:01:32,640 –> 00:01:34,400
به شما نشان دهیم، باید دوربینم را برای
53
00:01:34,400 –> 00:01:36,400
یک ثانیه در اینجا خاموش کنم زیرا نمی توانم از دوربینم برای این کار استفاده کنم.
54
00:01:36,400 –> 00:01:37,520
ضبط
55
00:01:37,520 –> 00:01:39,520
و برای اسکریپت، بنابراین من به شما نشان میدهم که
56
00:01:39,520 –> 00:01:41,520
اسکریپت چگونه کار میکند و برای این کار
57
00:01:41,520 –> 00:01:43,200
مجبور شدم ضبط دوربین را خاموش کنم،
58
00:01:43,200 –> 00:01:43,840
59
00:01:43,840 –> 00:01:45,360
اما ما فقط میخواهیم
60
00:01:45,360 –> 00:01:47,040
اسکریپت را همین الان اجرا کنیم تا بتوانید ببینید
61
00:01:47,040 –> 00:01:48,880
چه چیزی داریم. دوباره با
62
00:01:48,880 –> 00:01:51,439
پایتون اصلی py تمام
63
00:01:51,439 –> 00:01:53,119
میشوید، این اسکریپت کامل شماست همچنین می توانید آن را در github دریافت
64
00:01:53,119 –> 00:01:55,520
کنید اگر نمی خواهید خودتان آن را کد کنید
65
00:01:55,520 –> 00:01:57,520
و اکنون فقط نام کلاس اول را وارد کرده اید
66
00:01:57,520 –> 00:01:59,040
و اولین کلاس می تواند
67
00:01:59,040 –> 00:02:00,479
هر چیزی که می خواهید باشد، فقط اولین
68
00:02:00,479 –> 00:02:02,399
نوع چیزی است که می خواهید طبقه بندی
69
00:02:02,399 –> 00:02:04,320
کنید. مثلاً بگویید خودکار و
70
00:02:04,320 –> 00:02:05,840
دومی ساعت است یا
71
00:02:05,840 –> 00:02:07,439
می توانید بگویید لیوان قهوه و
72
00:02:07,439 –> 00:02:09,440
دومی این است که کیف پول را نمی دانم یا چیزی
73
00:02:09,440 –> 00:02:10,720
آهان کاری که ما می خواهیم انجام دهیم این
74
00:02:10,720 –> 00:02:12,480
است که تلفن داشته
75
00:02:12,480 –> 00:02:14,480
باشیم پس می رویم برای نشان دادن تلفن به
76
00:02:14,480 –> 00:02:15,920
دوربین
77
00:02:15,920 –> 00:02:19,120
یا کتاب و طبقهبندیکننده دوربین Uh
78
00:02:19,120 –> 00:02:19,760
79
00:02:19,760 –> 00:02:21,599
میتواند تشخیص دهد که اکنون
80
00:02:21,599 –> 00:02:23,599
دوباره اینجا هستیم، دوربین را اینجا میبینیم و
81
00:02:23,599 –> 00:02:25,040
آنچه میتوانید در اینجا ببینید این است که ما
82
00:02:25,040 –> 00:02:26,640
یکسری دکمه داریم، اکنون پیشبینی خودکار
83
00:02:26,640 –> 00:02:27,920
چیزی است که
84
00:02:27,920 –> 00:02:28,720
در یک ثانیه در مورد آن صحبت
85
00:02:28,720 –> 00:02:30,480
خواهیم کرد و سپس دو کلاس در اینجا
86
00:02:30,480 –> 00:02:31,920
تلفن و کتاب و
87
00:02:31,920 –> 00:02:33,440
تلفن و کتاب اساساً دو
88
00:02:33,440 –> 00:02:35,280
موردی هستند که میخواهیم آنها را طبقهبندی کنیم، بنابراین این
89
00:02:35,280 –> 00:02:36,000
دو دکمه
90
00:02:36,000 –> 00:02:38,319
به ما اجازه میدهند چند اسکرین شات بگیریم و
91
00:02:38,319 –> 00:02:39,920
چند نمونه اضافه کنیم. بنابراین در حال
92
00:02:39,920 –> 00:02:42,160
حاضر مدل کل اسکریپت اینجا
93
00:02:42,160 –> 00:02:43,519
k نیست حالا تلفن چیست، نمیدانم
94
00:02:43,519 –> 00:02:44,080
کتاب چیست
95
00:02:44,080 –> 00:02:45,920
، اصلاً نمونهای ندارد، ما
96
00:02:45,920 –> 00:02:48,080
فقط این دوربین زنده فعال را اینجا داریم، اما
97
00:02:48,080 –> 00:02:49,280
اصلاً تصویری نداریم،
98
00:02:49,280 –> 00:02:50,720
بنابراین کاری که میخواهیم انجام دهیم این است که
99
00:02:50,720 –> 00:02:53,200
نشان دهیم
100
00:02:53,200 –> 00:02:54,800
چندین بار تلفن را به دوربین میبریم و همزمان روی دکمه تلفن کلیک
101
00:02:54,800 –> 00:02:55,680
102
00:02:55,680 –> 00:02:57,519
میکنیم و ما کتابی را نشان میدهیم
103
00:02:57,519 –> 00:02:59,760
که جادوی بزرگاندیشی است در اینجا
104
00:02:59,760 –> 00:03:01,840
میخواهیم این کتاب را
105
00:03:01,840 –> 00:03:02,879
از
106
00:03:02,879 –> 00:03:04,080
زوایای مختلف به دوربین نشان دهیم و ما
107
00:03:04,080 –> 00:03:06,159
همزمان روی دکمه کتاب کلیک می کنیم
108
00:03:06,159 –> 00:03:09,040
با این کار اوه اسکریپت یاد می گیرد
109
00:03:09,040 –> 00:03:09,760
که گوشی
110
00:03:09,760 –> 00:03:11,360
چیست و کتاب چیست یا اساساً
111
00:03:11,360 –> 00:03:13,200
نمونه ها را آماده می کند و وقتی
112
00:03:13,200 –> 00:03:15,280
مدل قطار را کلیک می کنیم آن را یاد می گیرد
113
00:03:15,280 –> 00:03:16,480
و سپس می توانیم فقط
114
00:03:16,480 –> 00:03:19,200
کتاب یا تلفن را دوباره به ما نشان دهید
115
00:03:19,200 –> 00:03:20,959
و پیش بینی می کند که آیا
116
00:03:20,959 –> 00:03:23,920
این کتاب است یا تلفن و همچنین می توانیم
117
00:03:23,920 –> 00:03:25,360
کل فرآیند را بازنشانی کنیم، بنابراین
118
00:03:25,360 –> 00:03:26,879
بیایید ادامه دهیم و چند
119
00:03:26,879 –> 00:03:28,959
نمونه را در اینجا انجام دهیم که من فقط می خواهم درست کنم.
120
00:03:28,959 –> 00:03:31,599
عکس های اینجا از گوشی من
121
00:03:31,599 –> 00:03:33,519
از زوایای مختلف شما
122
00:03:33,519 –> 00:03:37,040
همه سایت های مختلف را نزدیک تر
123
00:03:37,040 –> 00:03:40,959
فا به هر حال، بنابراین ما همه
124
00:03:40,959 –> 00:03:43,280
این موقعیتهای مختلف را در اینجا
125
00:03:43,280 –> 00:03:44,640
داریم و اکنون میخواهیم همین کار را
126
00:03:44,640 –> 00:03:46,080
برای کتاب انجام دهیم، بنابراین فقط میخواهیم
127
00:03:46,080 –> 00:03:48,560
کتاب را
128
00:03:48,560 –> 00:03:50,000
از زوایای مختلف نگه داریم و فقط
129
00:03:50,000 –> 00:03:51,599
دادههای آموزشی را ارائه میکنیم. در اینجا
130
00:03:51,599 –> 00:03:53,200
برای کسانی از شما که با
131
00:03:53,200 –> 00:03:54,959
داده های آموزشی یادگیری ماشینی آشنا هستند، این فقط
132
00:03:54,959 –> 00:03:55,599
داده هایی است
133
00:03:55,599 –> 00:03:57,519
که مدل قبلاً طبقه بندی کرده است، ما در
134
00:03:57,519 –> 00:03:59,120
اینجا کلاس ها را ارائه می
135
00:03:59,120 –> 00:04:01,200
دهیم، اجازه دهید نگاهی بیندازیم که چند عدد از
136
00:04:01,200 –> 00:04:02,879
آنها را در حال حاضر داریم
137
00:04:02,879 –> 00:04:08,239
مانند Uh 76 کلاس. 1 و ما
138
00:04:08,239 –> 00:04:10,400
52 از کلاس 2 داریم. بنابراین بیایید یک سری
139
00:04:10,400 –> 00:04:15,439
کارهای بیشتر از طرف کتاب در اینجا
140
00:04:15,439 –> 00:04:19,279
141
00:04:19,279 –> 00:04:20,720
انجام دهیم، خیلی خوب است و حالا کاری که انجام می دهیم این است که ادامه دهیم
142
00:04:20,720 –> 00:04:23,199
و بگوییم مدل قطار
143
00:04:23,199 –> 00:04:25,360
و این ممکن است کمی طول بکشد و
144
00:04:25,360 –> 00:04:26,880
همچنین یخ زدن دوربین اما وقتی این
145
00:04:26,880 –> 00:04:28,479
کار انجام شد، مدل آموزش داده شد،
146
00:04:28,479 –> 00:04:29,360
میتوانیم پیامی را
147
00:04:29,360 –> 00:04:32,400
در کنسول در اینجا ببینیم، فکر میکنم نه، ما نمیتوانیم
148
00:04:32,400 –> 00:04:34,240
اوه، معمولاً میتوانیم آن را ببینیم،
149
00:04:34,240 –> 00:04:36,000
اما ما فقط همه آنها را آموزش دادیم و اکنون
150
00:04:36,000 –> 00:04:38,400
کاری که میتوانیم انجام دهیم این است که میتوانیم کتاب
151
00:04:38,400 –> 00:04:41,120
را در دوربین نگه دارید و می توانیم بگوییم پیشبینی کنید
152
00:04:41,120 –> 00:04:42,960
و میخواهد بگوید که این یک کتاب است،
153
00:04:42,960 –> 00:04:45,040
اکنون میتوانم جلوتر بروم و تلفن
154
00:04:45,040 –> 00:04:46,400
را در دوربین بگیرم
155
00:04:46,400 –> 00:04:48,560
و بگویم پیشبینی کنید و حالا میخواهد بگوید
156
00:04:48,560 –> 00:04:50,080
تلفن اگر کاری انجام ندهم
157
00:04:50,080 –> 00:04:51,360
احتمالاً
158
00:04:51,360 –> 00:04:53,199
تلفن را خواهد گفت زیرا هیچ چیز شبیه
159
00:04:53,199 –> 00:04:54,400
من نیست. من تلفنی را در دست میگیرم
160
00:04:54,400 –> 00:04:56,000
تا کتاب، زیرا کتاب سفید است، بنابراین
161
00:04:56,000 –> 00:04:57,600
اگر چیزی نگویم بله، احتمالاً
162
00:04:57,600 –> 00:04:58,560
تلفن خواهد بود،
163
00:04:58,560 –> 00:05:01,280
اما هر بار که کتاب را بالا
164
00:05:01,280 –> 00:05:02,639
میگیرم،
165
00:05:02,639 –> 00:05:04,880
این را به عنوان کتاب تشخیص میدهم و اکنون میتوانیم
166
00:05:04,880 –> 00:05:06,800
خودکار را نیز روشن کنیم. پیشبینی
167
00:05:06,800 –> 00:05:08,479
که دائماً پیشبینی میکند، بنابراین اگر
168
00:05:08,479 –> 00:05:09,919
تلفن را در دست بگیرم، مطمئناً تلفن را میگوید
169
00:05:09,919 –> 00:05:10,400
170
00:05:10,400 –> 00:05:13,120
و حالا وقتی کتابی را در دست
171
00:05:13,120 –> 00:05:14,240
میگیرم،
172
00:05:14,240 –> 00:05:19,120
آن را به عنوان یک کتاب میشناسد، بنابراین
173
00:05:19,199 –> 00:05:20,639
نیازی ندارم. گوشی را بالا بگیر
174
00:05:20,639 –> 00:05:22,400
تا بگوییم این یک گوشی است،
175
00:05:22,400 –> 00:05:23,680
زیرا میدانی چه زمانی نمیتوانی چه
176
00:05:23,680 –> 00:05:24,960
زمانی که کاری انجام میدهی که
177
00:05:24,960 –> 00:05:27,199
اصلاً ندارد یا
178
00:05:27,199 –> 00:05:28,880
مدلی که قبلاً هرگز آن را ندیده است، مانند بلند کردن
179
00:05:28,880 –> 00:05:29,520
چیزی
180
00:05:29,520 –> 00:05:32,000
یا نگه داشتن شاید اوه من نمی دانم یک
181
00:05:32,000 –> 00:05:33,680
ساعت احتمالاً شبیه یک تلفن نیز به
182
00:05:33,680 –> 00:05:34,240
183
00:05:34,240 –> 00:05:35,759
نظر می رسد چیزی شبیه به این
184
00:05:35,759 –> 00:05:37,280
که مرکز خرید گیج میشود،
185
00:05:37,280 –> 00:05:39,120
اما لحظهای که کتابی را در دست میگیرید،
186
00:05:39,120 –> 00:05:40,880
متوجه میشوید که این یک کتاب است،
187
00:05:40,880 –> 00:05:43,280
پس این همان چیزی است که ما
188
00:05:43,280 –> 00:05:44,880
اینجا میسازیم و میتوانیم آن را با
189
00:05:44,880 –> 00:05:46,320
انواع مختلف بسازیم. اشیاء مختلف
190
00:05:46,320 –> 00:05:47,600
خوبی در مورد این است که ما
191
00:05:47,600 –> 00:05:49,039
محدود به تلفن ها و کتاب ها
192
00:05:49,039 –> 00:05:51,360
نیستیم، بلکه به هر داده آموزشی
193
00:05:51,360 –> 00:05:53,039
که به این
194
00:05:53,039 –> 00:05:54,400
طبقه بندی کننده دوربین می
195
00:05:54,400 –> 00:05:56,639
دهیم محدود
196
00:05:56,639 –> 00:05:57,919
شده ایم.
197
00:05:57,919 –> 00:06:00,720
تصاویر 10 دسته از تصاویر
198
00:06:00,720 –> 00:06:02,240
که شما به معنای واقعی کلمه می توانید هر کاری را که می توانید
199
00:06:02,240 –> 00:06:03,199
بگویید انجام دهید،
200
00:06:03,199 –> 00:06:04,960
وقتی لبخند می زنم توجه کنید وقتی
201
00:06:04,960 –> 00:06:06,400
عصبانی هستم توجه کنید
202
00:06:06,400 –> 00:06:08,400
وقتی عصبانی هستم هر چه که باشد، فقط می توانید
203
00:06:08,400 –> 00:06:10,560
این چیزها را بر اساس مثال ها طبقه بندی کنید،
204
00:06:10,560 –> 00:06:12,479
205
00:06:12,479 –> 00:06:14,240
بنابراین بیایید ادامه دهیم و این را بسازیم
206
00:06:14,240 –> 00:06:16,479
اکنون از ابتدا از
207
00:06:16,479 –> 00:06:18,479
کد github استفاده می کنم که می توانید به صورت آنلاین در github.com9 پیدا کنید،
208
00:06:18,479 –> 00:06:19,960
209
00:06:19,960 –> 00:06:22,720
من از آن به عنوان یک جهت استفاده می کنم،
210
00:06:22,720 –> 00:06:24,560
ما می خواهیم
211
00:06:24,560 –> 00:06:25,680
همه چیز را بازسازی کنیم،
212
00:06:25,680 –> 00:06:27,280
اما من از آن صرف نظر می کنم. قطعات را یا نه
213
00:06:27,280 –> 00:06:28,960
لزوما پرش، اما کپی پیست
214
00:06:28,960 –> 00:06:29,759
قطعات که
215
00:06:29,759 –> 00:06:32,880
کاملا خسته کننده هستند و در واقع در جایی که
216
00:06:32,880 –> 00:06:33,520
217
00:06:33,520 –> 00:06:35,520
واقعا منطق زیادی پشت آن وجود ندارد، برای
218
00:06:35,520 –> 00:06:37,199
مثال ایجاد رابط کاربری گرافیکی برای
219
00:06:37,199 –> 00:06:38,240
220
00:06:38,240 –> 00:06:40,479
طراحی همه این دکمه ها یا
221
00:06:40,479 –> 00:06:42,000
کار طراحی زیادی نیست، اما می دانید که
222
00:06:42,000 –> 00:06:43,919
ایجاد همه این دکمه ها و غیره
223
00:06:43,919 –> 00:06:45,440
چیزی است. که من می خواهم کپی
224
00:06:45,440 –> 00:06:46,960
کنم زیرا پیچیده نیست، فقط یک
225
00:06:46,960 –> 00:06:48,080
کار تکراری است،
226
00:06:48,080 –> 00:06:49,919
اما هر زمان که نوبت به
227
00:06:49,919 –> 00:06:51,120
پردازش دوربین
228
00:06:51,120 –> 00:06:53,520
یا تست آموزش طبقه بندی می شود،
229
00:06:53,520 –> 00:06:54,160
هر
230
00:06:54,160 –> 00:06:56,319
چیزی که می خواهیم کد را مرحله به
231
00:06:56,319 –> 00:06:57,840
مرحله بسازیم، کار زیادی انجام نمی دهیم در مورد کپی
232
00:06:57,840 –> 00:06:58,560
پیست در اینجا،
233
00:06:58,560 –> 00:07:01,520
ما فقط
234
00:07:01,520 –> 00:07:03,360
قسمت هایی از کد را که واقعاً
235
00:07:03,360 –> 00:07:04,479
پیچیده نیستند، کپی پیست می کنیم،
236
00:07:04,479 –> 00:07:05,800
بنابراین با camera.py شروع می
237
00:07:05,800 –> 00:07:07,680
کنیم
238
00:07:07,680 –> 00:07:10,160
که مشخصاً بخشی است که
239
00:07:10,160 –> 00:07:11,360
با دوربین کار می کنیم.
240
00:07:11,360 –> 00:07:15,520
میخواهم برای این uh cv2 که opencv است
241
00:07:15,520 –> 00:07:18,960
به عنوان cv وارد کنم،
242
00:07:18,960 –> 00:07:20,880
اتفاقاً اگر cv2 را نصب نکردهاید، فقط پیش بروید و
243
00:07:20,880 –> 00:07:23,120
در کنسول خود تایپ کنید install
244
00:07:23,120 –> 00:07:26,160
uh open cv منهای پایتون، فکر میکنم اینطوری
245
00:07:26,160 –> 00:07:26,880
246
00:07:26,880 –> 00:07:31,039
opencv را نصب میکنیم و سپس تو می توانی فقط cv2 را وارد کنید،
247
00:07:31,039 –> 00:07:32,400
بنابراین این همان چیزی است که ما برای ماژول دوربین نیاز
248
00:07:32,400 –> 00:07:34,240
داریم و سپس فقط یک
249
00:07:34,240 –> 00:07:35,599
دوربین کلاس در اینجا ایجاد می کنیم
250
00:07:35,599 –> 00:07:37,520
و برای این کار به سازنده نیاز داریم یک
251
00:07:37,520 –> 00:07:38,960
سازنده اساساً
252
00:07:38,960 –> 00:07:40,479
چیزی است که هنگام ایجاد یک
253
00:07:40,479 –> 00:07:42,479
نمونه جدید از دوربین
254
00:07:42,479 –> 00:07:43,879
و در اینجا فراخوانی می شود. ما فقط میخواهیم بگوییم
255
00:07:43,879 –> 00:07:46,080
self.camera
256
00:07:46,080 –> 00:07:49,199
ضبط ویدیوی نقطهای cv است
257
00:07:49,199 –> 00:07:51,520
و سپس اگر
258
00:07:51,520 –> 00:07:52,240
فقط یک
259
00:07:52,240 –> 00:07:54,000
وبکم دارید اگر فقط یک دوربین دارید مانند
260
00:07:54,000 –> 00:07:56,639
من همیشه صفر را مشخص میکنیم
261
00:07:56,639 –> 00:07:57,680
اگر چندتایی
262
00:07:57,680 –> 00:07:59,199
دارید میتوانید یکی را مشخص کنید. که به آن
263
00:07:59,199 –> 00:08:01,039
علاقه مند هستید یا می خواهید،
264
00:08:01,039 –> 00:08:02,800
بنابراین اگر دو وب کم دارید،
265
00:08:02,800 –> 00:08:04,400
یکی صفر و یکی در این یکی
266
00:08:04,400 –> 00:08:05,680
اگر سه وب کم
267
00:08:05,680 –> 00:08:06,879
دارید، صفر و یک دو خواهید داشت،
268
00:08:06,879 –> 00:08:08,879
بنابراین اگر فقط دارید یکی مانند بسیاری از
269
00:08:08,879 –> 00:08:10,879
مردم شما فقط از صفر استفاده می کنید و در غیر این
270
00:08:10,879 –> 00:08:13,039
صورت فقط با صفر یکی دو بازی می کنید،
271
00:08:13,039 –> 00:08:14,160
هر چه
272
00:08:14,160 –> 00:08:17,280
om که در
273
00:08:17,280 –> 00:08:18,800
اصل دوربین است که فیلم می گیرد و سپس می
274
00:08:18,800 –> 00:08:20,879
گویید اگر نه
275
00:08:20,879 –> 00:08:24,400
دوربین self dot باز است بنابراین
276
00:08:24,400 –> 00:08:25,759
اگر به دلایلی
277
00:08:25,759 –> 00:08:28,000
ما این را مقداردهی اولیه کنیم و دوربین باز نیست
278
00:08:28,000 –> 00:08:29,680
زیرا خطایی وجود دارد یا
279
00:08:29,680 –> 00:08:30,479
چیزی
280
00:08:30,479 –> 00:08:32,240
اوه ما فقط خطای مقدار را افزایش می
281
00:08:32,240 –> 00:08:33,760
دهیم بنابراین می خواهیم بگوییم
282
00:08:33,760 –> 00:08:38,320
خطای مقدار قادر به باز
283
00:08:38,320 –> 00:08:43,360
کردن دوربین نیست قادر به باز کردن دوربین
284
00:08:43,360 –> 00:08:45,440
نیست بنابراین کار بعدی این است که شما می خواهید انجام دهید
285
00:08:45,440 –> 00:08:47,440
وقتی دوربین از بین میرود نه
286
00:08:47,440 –> 00:08:49,519
مثل نابودی، بلکه وقتی
287
00:08:49,519 –> 00:08:50,480
دوربین
288
00:08:50,480 –> 00:08:52,800
را میبندی وقتی شیء را حذف میکنی، میخواهی
289
00:08:52,800 –> 00:08:54,560
دوربین را هم ببندی، بنابراین وقتی
290
00:08:54,560 –> 00:08:57,040
نمونهای از دوربین را در اینجا از
291
00:08:57,040 –> 00:08:58,959
این دوربین کلاس حذف میکنیم، میخواهیم فیلمبرداری را نیز
292
00:08:58,959 –> 00:09:00,480
ببندیم.
293
00:09:00,480 –> 00:09:02,640
بنابراین میخواهیم بگوییم که dell،
294
00:09:02,640 –> 00:09:04,640
تابعی است که زمانی فراخوانی میشود که
295
00:09:04,640 –> 00:09:07,040
میتوانیم بگوییم این ویرانگر است، من
296
00:09:07,040 –> 00:09:08,600
میخواهم بگویم خوب است اگر
297
00:09:08,600 –> 00:09:11,519
self.camera باز است، بنابراین اگر هنوز
298
00:09:11,519 –> 00:09:12,720
باز است حتی اگر به آن نیازی نداریم.
299
00:09:12,720 –> 00:09:13,360
دیگر
300
00:09:13,360 –> 00:09:15,399
فقط میخواهیم بگوییم
301
00:09:15,399 –> 00:09:16,800
self.camera.release که
302
00:09:16,800 –> 00:09:18,880
عملکردی است که دوربین را آزاد میکند جریان دوربین را میبندد
303
00:09:18,880 –> 00:09:20,640
304
00:09:20,640 –> 00:09:22,080
و سپس مهمترین عملکرد
305
00:09:22,080 –> 00:09:23,839
در اینجا تابع دریافت فریم است که در
306
00:09:23,839 –> 00:09:25,040
اصل
307
00:09:25,040 –> 00:09:27,040
فقط فریم بعدی را دریافت میکند. آنچه
308
00:09:27,040 –> 00:09:28,240
ما می خواهیم o انجام دهید این است که میخواهیم
309
00:09:28,240 –> 00:09:30,000
نمونههای دوربین ایجاد کنیم و سپس میخواهیم
310
00:09:30,000 –> 00:09:31,839
فریمها را از بیرون دریافت
311
00:09:31,839 –> 00:09:32,480
312
00:09:32,480 –> 00:09:34,240
کنیم زیرا ما این اسکریپت را بر
313
00:09:34,240 –> 00:09:36,080
اساس شی گرا میسازیم، کلاسها
314
00:09:36,080 –> 00:09:37,120
و اشیاء داریم
315
00:09:37,120 –> 00:09:39,920
و نمیتوانم مستقیماً به این دوربین
316
00:09:39,920 –> 00:09:40,800
در اینجا دسترسی
317
00:09:40,800 –> 00:09:43,120
داشته باشم. دسترسی مستقیم به دوربین یا حداقل
318
00:09:43,120 –> 00:09:44,640
تمرین خوبی نیست،
319
00:09:44,640 –> 00:09:46,240
ما میخواهیم روشی داشته باشیم که
320
00:09:46,240 –> 00:09:47,839
به ما امکان میدهد فریم بعدی را دریافت
321
00:09:47,839 –> 00:09:52,000
کنیم، بنابراین میخواهیم بگوییم که def یک فریم را دریافت
322
00:09:52,000 –> 00:09:54,560
کنم قبلاً وجود دارد و سپس فقط
323
00:09:54,560 –> 00:09:55,279
میگوییم که آیا
324
00:09:55,279 –> 00:09:58,959
دوربین self dot باز است،
325
00:09:58,959 –> 00:10:00,320
ما همیشه باید این مورد را بررسی
326
00:10:00,320 –> 00:10:01,920
کنیم، در غیر
327
00:10:01,920 –> 00:10:02,560
328
00:10:02,560 –> 00:10:04,480
این صورت اگر بتوانیم به دوربین دسترسی داشته
329
00:10:04,480 –> 00:10:06,000
باشیم با خطاهایی مواجه خواهیم شد، فقط میخواهیم بگوییم
330
00:10:06,000 –> 00:10:09,839
مقدار بازگشتی و فریم برابر است با دوربین
331
00:10:09,839 –> 00:10:13,120
self.camera متأسفانه cell.camera
332
00:10:13,120 –> 00:10:15,600
خوانده می شود که اساساً
333
00:10:15,600 –> 00:10:17,040
فریم بعدی را دریافت می کند،
334
00:10:17,040 –> 00:10:19,120
بنابراین بررسی می کنیم که آیا مقدار بازگشتی وجود دارد اگر مقدار بازگشتی
335
00:10:19,120 –> 00:10:21,279
336
00:10:21,279 –> 00:10:23,920
فعال است، اگر وجود دارد، ما فقط می
337
00:10:23,920 –> 00:10:24,399
338
00:10:24,399 –> 00:10:25,839
خواهیم بگوییم بازگشت و چند عدد از را
339
00:10:25,839 –> 00:10:27,680
برگردانیم. مقدار بازگشتی
340
00:10:27,680 –> 00:10:29,120
و ما می خواهیم برگردیم قاب اما
341
00:10:29,120 –> 00:10:30,720
ما قصد داریم طرح رنگ را تبدیل کنیم
342
00:10:30,720 –> 00:10:32,160
زیرا
343
00:10:32,160 –> 00:10:34,959
وقتی که داده های تصویر را
344
00:10:34,959 –> 00:10:36,959
با opencv پردازش می کنید یک bgr دریافت می کنید
345
00:10:36,959 –> 00:10:40,240
که یک تصویر قرمز سبز آبی است و ما
346
00:10:40,240 –> 00:10:42,240
می خواهیم یک تصویر rgb داشته باشیم که
347
00:10:42,240 –> 00:10:43,680
قرمز سبز آبی است، بنابراین ما فقط نیاز داریم برای
348
00:10:43,680 –> 00:10:46,800
تبدیل آن می گوییم cb.cvt
349
00:10:46,800 –> 00:10:49,760
بنابراین رنگ فریم
350
00:10:49,760 –> 00:10:50,880
را تبدیل می کنیم و
351
00:10:50,880 –> 00:10:54,000
cv uh را از bgr
352
00:10:54,000 –> 00:10:56,800
به rgb تبدیل می کنیم بنابراین اگر مقدار بازگشتی وجود نداشته باشد این کاری است که انجام
353
00:10:56,800 –> 00:10:58,480
می دهیم.
354
00:10:58,480 –> 00:11:00,720
فقط میخواهیم
355
00:11:00,720 –> 00:11:04,240
قرمز هیچکدام را برگردانیم و همچنین اگر دوربین
356
00:11:04,240 –> 00:11:07,680
باز نشد، فقط هیچکدام را برمیگردانیم،
357
00:11:07,680 –> 00:11:09,440
بنابراین این کل اسکریپت دوربین است،
358
00:11:09,440 –> 00:11:10,800
این کل کلاس دوربین است
359
00:11:10,800 –> 00:11:12,800
و اکنون میتوانیم قسمت بعدی
360
00:11:12,800 –> 00:11:14,720
کد را
361
00:11:14,720 –> 00:11:17,839
ادامه دهیم. مرحله بعدی باز کردن یک
362
00:11:17,839 –> 00:11:19,440
فایل app.py است که فایل اصلی است که قرار است از
363
00:11:19,440 –> 00:11:21,120
آن استفاده کنیم، مانند
364
00:11:21,120 –> 00:11:23,200
بخش مرکزی کل برنامه است، ما
365
00:11:23,200 –> 00:11:24,240
366
00:11:24,240 –> 00:11:26,240
رابط کاربری گرافیکی داریم در اینجا ما
367
00:11:26,240 –> 00:11:29,040
توابع کنترلی داریم که می گویند
368
00:11:29,040 –> 00:11:30,720
همه آنها را آموزش دهید. که می گویند
369
00:11:30,720 –> 00:11:33,279
ذخیره تصاویر چگونه می توان تصاویر را ذخیره کرد، شمارش این است که
370
00:11:33,279 –> 00:11:35,120
چند تصویر در حال حاضر وجود
371
00:11:35,120 –> 00:11:36,880
دارد دوربین را فراخوانی کنید همه چیز
372
00:11:36,880 –> 00:11:38,480
در این
373
00:11:38,480 –> 00:11:40,959
فایل اصلی uh app.py در اینجا ترکیب شده است و برای این کار ما باید
374
00:11:40,959 –> 00:11:42,480
یک دسته از کتابخانه ها را وارد کنیم
375
00:11:42,480 –> 00:11:44,399
اول از همه tk enter که
376
00:11:44,399 –> 00:11:46,160
کتابخانه ای برای رابط کاربری گرافیکی است
377
00:11:46,160 –> 00:11:47,600
که فکر می کنم در این کانال واقعاً هرگز استفاده نکرده ایم.
378
00:11:47,600 –> 00:11:48,000
379
00:11:48,000 –> 00:11:50,800
380
00:11:50,800 –> 00:11:53,040
رابط کاربری tk inter یا گرافیکی به طور کلی، بنابراین من فکر می کنم
381
00:11:53,040 –> 00:11:54,839
این ممکن است برای چند نفر
382
00:11:54,839 –> 00:11:57,040
در اینجا جدید باشد، اما خیلی پیچیده نیست، ما فقط می
383
00:11:57,040 –> 00:11:59,279
خواهیم tk inter stk را وارد
384
00:11:59,279 –> 00:12:02,639
کنیم، ما می خواهیم بگوییم از گفتگوی ساده tk inter import
385
00:12:02,639 –> 00:12:03,920
زیرا ما به
386
00:12:03,920 –> 00:12:05,519
دیالوگهای ساده برای
387
00:12:05,519 –> 00:12:07,040
دو سوال
388
00:12:07,040 –> 00:12:09,760
اولیه نیاز داریم که چگونه میخواهیم کلاسها را نامگذاری
389
00:12:09,760 –> 00:12:10,720
390
00:12:10,720 –> 00:12:13,240
کنیم و سپس میخواهیم بگوییم import cv2s
391
00:12:13,240 –> 00:12:15,040
392
00:12:15,040 –> 00:12:19,519
cv سپس میخواهیم بگوییم import os
393
00:12:19,519 –> 00:12:21,680
برای مدیریت فایلی که میخواهید بگویید
394
00:12:21,680 –> 00:12:22,560
import
395
00:12:22,560 –> 00:12:26,399
تصویر pillow p i l uh dot و p i l uh point
396
00:12:26,399 –> 00:12:29,760
image و p i l det تصویر خراب می شود اگر
397
00:12:29,760 –> 00:12:31,680
بالش ندارید فقط وارد
398
00:12:31,680 –> 00:12:32,880
خط فرمان خود شوید و بگویید
399
00:12:32,880 –> 00:12:35,920
pip install من فکر می کنم بالش است
400
00:12:35,920 –> 00:12:37,760
صادقانه بگویم فکر می کنم فقط بالش است اگر نه
401
00:12:37,760 –> 00:12:39,360
آه ممکن است بخواهید گوگل کنید آن را اما من
402
00:12:39,360 –> 00:12:40,959
p مطمئن باشید که این فقط pillow
403
00:12:40,959 –> 00:12:44,000
um است و سپس بسته pil را
404
00:12:44,000 –> 00:12:46,160
با تصویر در تصویر dk دریافت می کنید
405
00:12:46,160 –> 00:12:49,200
و سپس دوربین را نیز وارد می کنیم
406
00:12:49,200 –> 00:12:50,800
برای این کار حداقل در pycharm خطا می گیرید
407
00:12:50,800 –> 00:12:52,320
408
00:12:52,320 –> 00:12:54,240
زیرا تشخیص نمی دهد که وجود
409
00:12:54,240 –> 00:12:56,000
دارد یک ماژول به نام دوربین که ماژول ما است،
410
00:12:56,000 –> 00:12:56,639
411
00:12:56,639 –> 00:12:59,440
گاهی اوقات با ایجاد یک
412
00:12:59,440 –> 00:13:01,279
413
00:13:01,279 –> 00:13:04,000
فایل init dot py قابل رفع است، اما گاهی اوقات
414
00:13:04,000 –> 00:13:04,880
کار نمی کند،
415
00:13:04,880 –> 00:13:06,880
اما وقتی اسکریپت را اجرا می کنید،
416
00:13:06,880 –> 00:13:08,320
مشکلی وجود نخواهد داشت، فقط یک
417
00:13:08,320 –> 00:13:10,800
مشکل در اینجا وجود دارد. زیر آن قرمز خط کشیده شده است،
418
00:13:10,800 –> 00:13:13,279
اما این یک مشکل واقعی نیست،
419
00:13:13,279 –> 00:13:14,320
کد همچنان کار می کند،
420
00:13:14,320 –> 00:13:15,360
بنابراین کاری که ما در اینجا می خواهیم انجام دهیم این است
421
00:13:15,360 –> 00:13:17,279
که کلاس برنامه را ایجاد می کنیم که
422
00:13:17,279 –> 00:13:18,399
اساساً کل
423
00:13:18,399 –> 00:13:20,959
برنامه است و ما فقط یک سازنده
424
00:13:20,959 –> 00:13:21,760
ایجاد می کنیم.
425
00:13:21,760 –> 00:13:23,760
در اینجا میخواهیم
426
00:13:23,760 –> 00:13:25,279
بگوییم def init
427
00:13:25,279 –> 00:13:26,399
و در اینجا چند
428
00:13:26,399 –> 00:13:28,160
پارامتر را اول از همه
429
00:13:28,160 –> 00:13:30,160
خود پنجرهای که میخواهیم
430
00:13:30,160 –> 00:13:33,440
بسازیم یا از آن استفاده کنیم، tk.tk است با
431
00:13:33,440 –> 00:13:34,480
t بزرگ
432
00:13:34,480 –> 00:13:37,040
فقط سازنده یک پایه است. پنجره اوه
433
00:13:37,040 –> 00:13:38,959
این مقدار پیش فرض است اینها را به خاطر بسپارید
434
00:13:38,959 –> 00:13:41,120
پارامترهای پیشفرض هستند، میتوانید
435
00:13:41,120 –> 00:13:42,480
پنجره خود را نیز ارسال کنید،
436
00:13:42,480 –> 00:13:43,920
اما اگر چیزی را پاس نکنید،
437
00:13:43,920 –> 00:13:46,079
فقط از tktk استفاده میکنید
438
00:13:46,079 –> 00:13:49,839
و عنوان پنجره
439
00:13:49,839 –> 00:13:52,880
طبقهبندیکننده پیشفرض دوربین است،
440
00:13:52,880 –> 00:13:55,519
اما البته
441
00:13:55,519 –> 00:13:55,920
442
00:13:55,920 –> 00:13:58,560
اگر میخواهید میتوانید عنوان پنجره خود را نیز ارائه کنید. حالا
443
00:13:58,560 –> 00:14:00,399
ما فقط
444
00:14:00,399 –> 00:14:02,320
میخواهیم چیزهای اساسی را که میخواهیم بگوییم تنظیم
445
00:14:02,320 –> 00:14:03,199
446
00:14:03,199 –> 00:14:06,160
کنیم. پنجره برابر است با پنجره، میخواهیم بگوییم self.
447
00:14:06,160 –> 00:14:06,800
عنوان
448
00:14:06,800 –> 00:14:10,000
پنجره برابر است با عنوان پنجره
449
00:14:10,000 –> 00:14:12,480
و سپس شمارندهها را راهاندازی میکنیم حالا
450
00:14:12,480 –> 00:14:13,519
451
00:14:13,519 –> 00:14:16,560
شمارندهها فقط هستند آرایه ای از دو مقدار که هر دو
452
00:14:16,560 –> 00:14:18,160
از یک شروع می شوند و این مهم است
453
00:14:18,160 –> 00:14:18,800
زیرا
454
00:14:18,800 –> 00:14:20,560
همانطور که متوجه شدید وقتی روی
455
00:14:20,560 –> 00:14:22,959
دکمه های تلفن یا کتاب کلیک کردیم،
456
00:14:22,959 –> 00:14:24,399
تصاویر جدیدی از صفحه نمایش جدید ایجاد کردیم
457
00:14:24,399 –> 00:14:27,120
و آنها چیزی مانند کتاب
458
00:14:27,120 –> 00:14:29,120
یک کتاب دو کتاب سه
459
00:14:29,120 –> 00:14:32,079
یا کلاس یک کلاس نامگذاری شدند. کلاس یک یک
460
00:14:32,079 –> 00:14:33,279
کلاس یک دو
461
00:14:33,279 –> 00:14:35,120
و غیره اساساً فقط
462
00:14:35,120 –> 00:14:36,959
نام کلاس و به دنبال آن یک عدد است
463
00:14:36,959 –> 00:14:38,560
و برای اینکه اعداد را ردیابی
464
00:14:38,560 –> 00:14:40,480
کنیم، این آرایه از
465
00:14:40,480 –> 00:14:44,959
دو تا از دو شمارنده را داریم که از یک شروع می شود،
466
00:14:44,959 –> 00:14:47,199
بنابراین وقتی از صفحه نمایش عکس می گیریم
467
00:14:47,199 –> 00:14:48,720
اولین کلاس ما این
468
00:14:48,720 –> 00:14:50,000
یکی را افزایش خواهیم داد در غیر این صورت
469
00:14:50,000 –> 00:14:51,839
این یکی را فقط دو شمارنده اصلی افزایش
470
00:14:51,839 –> 00:14:53,600
می دهیم تا بدانیم قبلاً چند عکس گرفته
471
00:14:53,600 –> 00:14:54,880
472
00:14:54,880 –> 00:14:57,680
ایم و سپس می گوییم مدل خود اوه نقطه
473
00:14:57,680 –> 00:14:59,040
برابر است با
474
00:14:59,040 –> 00:15:01,279
چیزی که ما داریم بعداً تعریف
475
00:15:01,279 –> 00:15:02,880
میکنیم، زیرا هنوز مدل را انجام ندادهایم،
476
00:15:02,880 –> 00:15:03,600
477
00:15:03,600 –> 00:15:06,959
مدل یادگیری ماشین را انجام دادهایم و سپس
478
00:15:06,959 –> 00:15:10,000
479
00:15:10,000 –> 00:15:13,680
متغیر پیشبینی خودکار پیشبینی خودکار uh را نیز روی false تنظیم کردیم، اکنون
480
00:15:13,680 –> 00:15:14,320
این فقط
481
00:15:14,320 –> 00:15:16,639
یک نشانگر ساده است که به ما میگوید آیا
482
00:15:16,639 –> 00:15:18,800
میخواهیم پیشبینی خودکار را روشن کنیم. یا نه
483
00:15:18,800 –> 00:15:20,639
، ما می خواهیم پیش بینی زنده داشته باشیم یا
484
00:15:20,639 –> 00:15:22,399
فقط زمانی که روی دکمه پیش بینی کلیک می کنیم، پیش
485
00:15:22,399 –> 00:15:24,320
فرض فقط زمانی است که روی
486
00:15:24,320 –> 00:15:26,079
دکمه پیش بینی کلیک می کنیم، اما البته می توانیم
487
00:15:26,079 –> 00:15:29,120
این را نیز تغییر دهیم، سپس می گوییم
488
00:15:29,120 –> 00:15:30,480
self.camera
489
00:15:30,480 –> 00:15:35,839
برابر با camera.camera با یک a بزرگ
490
00:15:35,839 –> 00:15:38,480
و سپس تابعی از خود نقطه
491
00:15:38,480 –> 00:15:40,000
داریم که در یک ثانیه آن را تعریف می کنیم،
492
00:15:40,000 –> 00:15:42,240
بنابراین من آن را نیز نظر می دهم
493
00:15:42,240 –> 00:15:43,680
که کل رابط کاربری را مقداردهی اولیه می کند
494
00:15:43,680 –> 00:15:44,399
495
00:15:44,399 –> 00:15:46,320
تا همه چیز مانند دکمه ها و غیره
496
00:15:46,320 –> 00:15:47,440
نامیده شود
497
00:15:47,440 –> 00:15:49,360
will. در یک تابع جداگانه انجام شود ion اما
498
00:15:49,360 –> 00:15:51,040
پس از وجود همه این عناصر، ما
499
00:15:51,040 –> 00:15:51,920
فقط می خواهیم
500
00:15:51,920 –> 00:15:54,079
بارها و بارها رابط کاربری را به روز
501
00:15:54,079 –> 00:15:56,560
کنیم، بنابراین می گوییم self.delay
502
00:15:56,560 –> 00:16:00,199
برابر با 15 است و سپس یک
503
00:16:00,199 –> 00:16:02,399
تابع self.update خواهیم داشت که باید آن را نیز
504
00:16:02,399 –> 00:16:03,839
505
00:16:03,839 –> 00:16:05,440
بنویسیم. فعلاً
506
00:16:05,440 –> 00:16:07,279
507
00:16:07,279 –> 00:16:08,720
میخواهیم آن را نظر بدهیم، بنابراین در اینجا ما یک مدل در اینجا
508
00:16:08,720 –> 00:16:10,399
خواهیم داشت که میخواهیم رابط کاربری را مقداردهی کنیم،
509
00:16:10,399 –> 00:16:10,800
در واقع میتوانیم
510
00:16:10,800 –> 00:16:12,959
پیش برویم و نام تابع را از
511
00:16:12,959 –> 00:16:14,560
قبل بنویسیم و gui init
512
00:16:14,560 –> 00:16:17,440
و سپس خود را داشته باشیم. بهروزرسانی که
513
00:16:17,440 –> 00:16:19,120
اوه، چیزی است که فریم را بهروزرسانی میکند
514
00:16:19,120 –> 00:16:21,440
یا در واقع کل بوم را در تمام
515
00:16:21,440 –> 00:16:22,160
516
00:16:22,160 –> 00:16:24,639
مدت بهروزرسانی میکند، تمام رابط کاربری داخلی tk و سپس آخرین
517
00:16:24,639 –> 00:16:28,800
اما مهمترین
518
00:16:28,800 –> 00:16:31,839
ویژگیهای self.window dot را داریم
519
00:16:34,839 –> 00:16:36,000
520
00:16:36,000 –> 00:16:37,839
و این درست است که اساساً
521
00:16:37,839 –> 00:16:40,560
در مورد موقعیت پنجره
522
00:16:40,560 –> 00:16:44,000
و سپس حلقه اصلی self.window را داریم،
523
00:16:44,000 –> 00:16:47,279
بنابراین این سازنده اساسی است
524
00:16:47,279 –> 00:16:49,360
و اکنون سازنده اکنون
525
00:16:49,360 –> 00:16:51,120
می توانیم جلو برویم و توابع
526
00:16:51,120 –> 00:16:51,759
مورد نیاز خود را
527
00:16:51,759 –> 00:16:54,160
اضافه کنیم اول از همه ما یک
528
00:16:54,160 –> 00:16:55,839
تابع ساده اضافه می کنیم. هنوز استفاده نکردهایم
529
00:16:55,839 –> 00:16:56,880
530
00:16:56,880 –> 00:17:00,480
برای تماس با من صحبت میکنیم t uh toggle
531
00:17:00,480 –> 00:17:03,040
auto یا در واقع در اسکریپت چه نامی به آن دادم. تغییر
532
00:17:03,040 –> 00:17:04,799
پیش بینی
533
00:17:04,799 –> 00:17:08,640
یا خودکار پیش بینی تغییر وضعیت، بنابراین پیش بینی خودکار
534
00:17:08,640 –> 00:17:09,919
تغییر وضعیت این چیزی است که ما آن را
535
00:17:09,919 –> 00:17:11,679
536
00:17:11,679 –> 00:17:13,439
می خواهیم نامش را بگذاریم، این یک خط بسیار ساده
537
00:17:13,439 –> 00:17:15,199
است. پیشبینی خودکار
538
00:17:15,199 –> 00:17:17,760
، خود نیست. پیشبینی خودکار، بنابراین اساساً
539
00:17:17,760 –> 00:17:19,439
آنچه را که در حال حاضر هست نفی میکند، فقط تغییر میکند،
540
00:17:19,439 –> 00:17:21,039
اگر یک باشد، اگر درست باشد،
541
00:17:21,039 –> 00:17:21,599
صفر میشود،
542
00:17:21,599 –> 00:17:22,959
اگر نادرست باشد، نادرست خواهد بود
543
00:17:22,959 –> 00:17:24,480
، زیرا درست خواهد بود
544
00:17:24,480 –> 00:17:25,199
و غیره
545
00:17:25,199 –> 00:17:28,640
فقط تغییر میکند. وضعیت فعلی um
546
00:17:28,640 –> 00:17:30,480
هیچ خط جدیدی در فایل پایانی وجود ندارد، خوب
547
00:17:30,480 –> 00:17:33,360
مهم نیست و سپس میتوانیم ادامه دهیم و
548
00:17:33,360 –> 00:17:35,440
روی تابع initialize gui کار کنیم، اینجاست
549
00:17:35,440 –> 00:17:37,120
که میخواهیم کدی را کپی
550
00:17:37,120 –> 00:17:40,400
کنیم که میخواهیم بگوییم def init gui
551
00:17:40,400 –> 00:17:42,400
و در اینجا ما یک سری کد را کپی می کنیم،
552
00:17:42,400 –> 00:17:43,760
زیرا آن کد بسیار
553
00:17:43,760 –> 00:17:45,280
تکراری و ساده است، اکنون
554
00:17:45,280 –> 00:17:47,039
من هنوز آن را توضیح می دهم، بنابراین
555
00:17:47,039 –> 00:17:48,640
شوکه نشوید، فقط به این دلیل که من
556
00:17:48,640 –> 00:17:49,360
کدهای زیادی را در اینجا اضافه
557
00:17:49,360 –> 00:17:51,919
می کنم، این یک کد خواهد بود. اما
558
00:17:51,919 –> 00:17:53,600
خیلی ساده است همیشه همینطور است و من
559
00:17:53,600 –> 00:17:54,960
آن را برای شما توضیح خواهم داد و همچنین می توانید
560
00:17:54,960 –> 00:17:56,960
آن را از github کپی کنید، بنابراین
561
00:17:56,960 –> 00:17:58,799
نگران نباشید، بنابراین من همین الان
562
00:17:58,799 –> 00:18:00,000
این را از اینجا کپی می
563
00:18:00,000 –> 00:18:02,960
کنم، می خواهم آن را پیست کنم و
564
00:18:02,960 –> 00:18:04,000
این کد است،
565
00:18:04,000 –> 00:18:05,760
بسیار کد است. اما کد بسیار ساده ای
566
00:18:05,760 –> 00:18:07,440
است، بنابراین کاری که ما در ابتدا انجام می دهیم این است
567
00:18:07,440 –> 00:18:09,840
که می گوییم self.canvas برابر با tk canvas است،
568
00:18:09,840 –> 00:18:11,440
ما فقط یک بوم اولیه ایجاد
569
00:18:11,440 –> 00:18:14,080
می کنیم که در آن دوربینی
570
00:18:14,080 –> 00:18:16,880
را که self.window را به عنوان والد تنظیم می کنیم در اینجا
571
00:18:16,880 –> 00:18:17,760
به عنوان
572
00:18:17,760 –> 00:18:19,919
چیزی که در آن می خواهیم این
573
00:18:19,919 –> 00:18:21,440
بوم بوم را داشته باشیم و سپس
574
00:18:21,440 –> 00:18:24,160
عرض و ارتفاع دوربین را داشته باشیم، بنابراین
575
00:18:24,160 –> 00:18:25,039
اینها فقط
576
00:18:25,039 –> 00:18:28,320
ویژگی های اصلی دوربین
577
00:18:28,320 –> 00:18:31,200
هستند که در واقع در
578
00:18:31,200 –> 00:18:33,120
فایل دوربین
579
00:18:33,120 –> 00:18:34,640
این کار را انجام دادیم، نه ما این کار را نکردیم. باید این کار را نیز انجام دهم
580
00:18:34,640 –> 00:18:36,880
، فراموش کردم که باید
581
00:18:36,880 –> 00:18:40,240
عرض خود نقطه
582
00:18:40,240 –> 00:18:44,160
um را اضافه کنیم تا نقطه دریافت دوربین خود نقطه باشد
583
00:18:44,160 –> 00:18:47,440
584
00:18:47,440 –> 00:18:51,039
و عرض فریم پایه کلاهک cv را بدست آوریم و آن
585
00:18:51,039 –> 00:18:52,799
را کپی کرده و این کار را انجام می دهیم. برای ارتفاع یکسان است
586
00:18:52,799 –> 00:18:54,160
،
587
00:18:54,160 –> 00:18:55,919
بنابراین اساساً ما ارتفاع را تنظیم می
588
00:18:55,919 –> 00:18:57,200
589
00:18:57,200 –> 00:19:00,640
کنیم یا فقط باید
590
00:19:00,640 –> 00:19:03,840
مثل اینکه دو متغیر در اینجا داریم.
591
00:19:03,840 –> 00:19:05,840
دو ویژگی که ارتفاع
592
00:19:05,840 –> 00:19:07,760
و وزن عرض دوربین است
593
00:19:07,760 –> 00:19:08,480
متأسفم
594
00:19:08,480 –> 00:19:11,280
و سپس کاری که انجام می دهیم این است که آنها را
595
00:19:11,280 –> 00:19:13,200
به عرض و ارتفاع بوم اختصاص می
596
00:19:13,200 –> 00:19:15,200
دهیم بوم را بسته بندی می کنیم و سپس یک
597
00:19:15,200 –> 00:19:16,960
دسته دکمه در اینجا داریم که اینجا انجام دهید این
598
00:19:16,960 –> 00:19:18,960
است که می گوییم دکمه جابجایی خودکار
599
00:19:18,960 –> 00:19:20,559
دکمه کلاس یک و به همین ترتیب اینها همه
600
00:19:20,559 –> 00:19:22,840
دکمه هایی هستند که دارای
601
00:19:22,840 –> 00:19:25,520
عملکردهای خاصی
602
00:19:25,520 –> 00:19:27,520
هستند که آنها را صدا
603
00:19:27,520 –> 00:19:28,720
604
00:19:28,720 –> 00:19:30,720
می زنند، بنابراین هر بار که می گوییم خود دکمه tk داریم. پنجره جایی است که آنها به آن تعلق دارند،
605
00:19:30,720 –> 00:19:33,039
ما متنی برای آنها داریم.
606
00:19:33,039 –> 00:19:35,360
دکمهها عرض این دکمهها را داریم و
607
00:19:35,360 –> 00:19:36,880
سپس دستوری داریم که در واقع
608
00:19:36,880 –> 00:19:38,320
همان چیزی است که ما به آن اهمیت میدهیم، بنابراین دستور
609
00:19:38,320 –> 00:19:39,840
همیشه زمانی اتفاق میافتد که روی
610
00:19:39,840 –> 00:19:40,400
دکمه کلیک میکنید
611
00:19:40,400 –> 00:19:42,480
و وقتی روی دکمه خودکار کلیک میکنید، بنابراین
612
00:19:42,480 –> 00:19:44,240
دکمه پیشبینی خودکار را فقط پیشبینی خودکار صدا میزنید.
613
00:19:44,240 –> 00:19:46,799
تغییر تابع اوه در اینجا
614
00:19:46,799 –> 00:19:48,640
برخی از توابع در اینجا تعریف نشده اند،
615
00:19:48,640 –> 00:19:49,840
ما می
616
00:19:49,840 –> 00:19:51,840
خواهیم این کار را در یک ثانیه انجام دهیم، زمانی که
617
00:19:51,840 –> 00:19:53,840
ما در حال نوشتن سایر توابع
618
00:19:53,840 –> 00:19:56,160
هستیم، سپس همیشه آنها را بسته بندی می کنیم و
619
00:19:56,160 –> 00:19:57,280
آنها را در مرکز
620
00:19:57,280 –> 00:20:00,480
بسیار ساده تراز می کنیم، بنابراین در اینجا ما g et به دو
621
00:20:00,480 –> 00:20:01,919
دیالوگ ساده،
622
00:20:01,919 –> 00:20:03,760
نام کلاس یک و نام کلاس
623
00:20:03,760 –> 00:20:05,440
دو نتیجه این دیالوگ ها هستند، بنابراین ما
624
00:20:05,440 –> 00:20:07,520
یک گفتگوی ساده
625
00:20:07,520 –> 00:20:09,200
داریم که می گوییم نام کلاس اول را وارد کنید
626
00:20:09,200 –> 00:20:10,559
و
627
00:20:10,559 –> 00:20:13,440
پس از کلیک روی دکمه okay، در نتیجه دریافت می کنیم
628
00:20:13,440 –> 00:20:15,200
رشته و ما آن را در
629
00:20:15,200 –> 00:20:16,080
نام کلاس یک
630
00:20:16,080 –> 00:20:18,720
کلاس دو همان چیزی را ذخیره می کنیم و سپس
631
00:20:18,720 –> 00:20:19,200
632
00:20:19,200 –> 00:20:21,039
دکمه کلاس یک دکمه کلاس دو را داریم
633
00:20:21,039 –> 00:20:22,640
و متن این دکمه ها البته
634
00:20:22,640 –> 00:20:23,520
نام کلاس است،
635
00:20:23,520 –> 00:20:25,919
بنابراین این بستگی به ورودی ای دارد که
636
00:20:25,919 –> 00:20:26,799
کاربر ممکن
637
00:20:26,799 –> 00:20:30,640
است در اینجا بسازد. و اوه این دو
638
00:20:30,640 –> 00:20:32,640
دکمه تابعی به نام save for class را فراخوانی
639
00:20:32,640 –> 00:20:34,240
میکنند که هنوز تعریف نکردهایم، بنابراین
640
00:20:34,240 –> 00:20:35,760
تابع کلاس امنتر
641
00:20:35,760 –> 00:20:37,840
uh هنوز نوشته نشده است، میخواهیم این کار
642
00:20:37,840 –> 00:20:38,960
را در یک ثانیه انجام دهیم،
643
00:20:38,960 –> 00:20:40,400
اما در واقع این تابعی است که
644
00:20:40,400 –> 00:20:42,000
میخواهیم انجام دهیم. فراخوانی
645
00:20:42,000 –> 00:20:45,120
کنید تا تصویر را پردازش
646
00:20:45,120 –> 00:20:46,640
کنیم تا اسکرین شات تهیه شود تا آن را در
647
00:20:46,640 –> 00:20:48,480
فهرست درست ذخیره کنیم و به همین ترتیب آن را به روش درست برچسب گذاری کنیم
648
00:20:48,480 –> 00:20:50,559
649
00:20:50,559 –> 00:20:52,720
و ما در اینجا از لامبدا لامبدا استفاده می
650
00:20:52,720 –> 00:20:55,440
کنیم زیرا یک پارامتر را نیز ارسال می کنیم
651
00:20:55,440 –> 00:20:57,600
بنابراین هیچ چیز خیلی پیچیده ای نیست را داشته باشند
652
00:20:57,600 –> 00:20:58,720
دکمه train دکمه قطار
653
00:20:58,720 –> 00:21:00,640
فقط
654
00:21:00,640 –> 00:21:02,960
روش مدل mal.train را فراخوانی میکند که ما نیز هنوز انجام
655
00:21:02,960 –> 00:21:05,120
ندادهایم، باید فایل سومی را در اینجا
656
00:21:05,120 –> 00:21:07,200
model.py ایجاد کنیم، جایی که تابع trainmodel
657
00:21:07,200 –> 00:21:08,320
را نیز داریم،
658
00:21:08,320 –> 00:21:10,159
بنابراین این نیز چیزی است که باید انجام
659
00:21:10,159 –> 00:21:12,600
دهیم. اضافه کنید و کاری که انجام میدهیم این است که
660
00:21:12,600 –> 00:21:15,760
میگوییم self.counters بنابراین مقدار
661
00:21:15,760 –> 00:21:16,880
662
00:21:16,880 –> 00:21:19,360
اشیایی که برای آموزش در هر دو دسته نیاز داریم یا داریم را ارسال میکنیم
663
00:21:19,360 –> 00:21:20,400
664
00:21:20,400 –> 00:21:23,520
و
665
00:21:23,520 –> 00:21:24,960
سپس دکمه پیشبینی را داریم که
666
00:21:24,960 –> 00:21:26,480
بدیهی است فقط
667
00:21:26,480 –> 00:21:28,320
تابع پیشبینی را که ما هم نداریم فراخوانی میکند. t آن را تعریف کرد
668
00:21:28,320 –> 00:21:30,159
و سپس ما دکمه تنظیم مجدد را داریم که
669
00:21:30,159 –> 00:21:31,520
670
00:21:31,520 –> 00:21:33,440
همه چیز را نیز بازنشانی می کند، بنابراین این اساساً همان
671
00:21:33,440 –> 00:21:35,280
چیزی است که ما داریم، برچسب را در اینجا
672
00:21:35,280 –> 00:21:37,760
داریم، پیکربندی فونت را در اینجا
673
00:21:37,760 –> 00:21:39,600
داریم و بسته بندی را در انتها داریم، بنابراین
674
00:21:39,600 –> 00:21:41,520
این فقط uh است. چرا این را کپی
675
00:21:41,520 –> 00:21:43,039
کردم زیرا
676
00:21:43,039 –> 00:21:44,880
نوشتن دوباره همه چیز
677
00:21:44,880 –> 00:21:46,960
از ابتدا زمان زیادی می برد
678
00:21:46,960 –> 00:21:49,200
زیرا همیشه یکسان است.
679
00:21:49,200 –> 00:21:50,640
680
00:21:50,640 –> 00:21:53,120
681
00:21:53,120 –> 00:21:55,440
682
00:21:55,440 –> 00:21:57,440
این خیلی کامپوزیتی نیست
683
00:21:57,440 –> 00:21:59,679
توابع licated چیزی است که پیچیده است یا
684
00:21:59,679 –> 00:22:01,360
واقعاً پیچیده نیست، اما در جایی که همه
685
00:22:01,360 –> 00:22:02,799
منطق وجود دارد،
686
00:22:02,799 –> 00:22:04,159
اکنون میتوانیم جلو برویم و
687
00:22:04,159 –> 00:22:06,159
آن خط را حذف کنیم زیرا روش
688
00:22:06,159 –> 00:22:07,840
از قبل وجود دارد و ما
689
00:22:07,840 –> 00:22:10,880
با ایجاد توابع دیگر
690
00:22:10,880 –> 00:22:12,559
ادامه میدهیم، بنابراین میرویم. برای شروع با تابع save
691
00:22:12,559 –> 00:22:14,320
for class در اینجا
692
00:22:14,320 –> 00:22:16,799
ذخیره برای کلاس و در اینجا فقط
693
00:22:16,799 –> 00:22:18,960
پارامتری به نام cl