Merge branch 'main' into main

pull/305/head
Jim Bennett 4 years ago committed by GitHub
commit c0306402bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

1
.gitignore vendored

@ -8,3 +8,4 @@
.vscode/ipch
.ipynb_checkpoints
/node_modules
quiz-app/dist

@ -10,7 +10,7 @@
## Pengantar
Pelajaran ini mencakup beberapa topok pengantar mengenai Internet of Things, dan membuat Anda dapat mempersiapkan dan mengatur perangkat keras Anda.
Pelajaran ini mencakup beberapa topik pengantar mengenai Internet of Things, dan membuat Anda dapat mempersiapkan dan mengatur perangkat keras Anda.
Dalam pelajaran ini kita akan membahas:

@ -154,6 +154,16 @@ Write the Hello World app.
The `loop` function sends the line `Hello World!` to the serial port, so the characters of `Hello World!` along with a new line character. It then sleeps for 5,000 milliseconds or 5 seconds. After the `loop` ends, it is run again, and again, and so on all the time the microcontroller is powered on.
1. Put your Wio Terminal into upload mode. You will need to do this every time you upload new code to the device:
1. Pull down twice quickly on the power switch - it will spring back to the on position each time.
1. Check the blue status LED to the right hand side of the USB port. It should be pulsing.
[![A video showing how to put the Wio Terminal into upload mode](https://img.youtube.com/vi/LeKU_7zLRrQ/0.jpg)](https://youtu.be/LeKU_7zLRrQ)
Click the image above for a video showing how to do this.
1. Build and upload the code to the Wio Terminal
1. Open the VS Code command palette
@ -168,7 +178,7 @@ Write the Hello World app.
> 💁 If you are using macOS, a notification about a *DISK NOT EJECTED PROPERLY* will appear. This is because the Wio Terminal gets mounted as a drive as part of the flashing process, and it is disconnected when the compiled code is written to the device. You can ignore this notification.
⚠️ If you get errors about the upload port being unavailable, first make sure you have the Wio Terminal connected to your computer, and switched on using the switch on the left hand side of the screen. The green light on the bottom should be on. If you still get the error, pull the on/off switch down twice in quick succession to force the Wio Terminal into bootloader mode and try the upload again.
⚠️ If you get errors about the upload port being unavailable, first make sure you have the Wio Terminal connected to your computer, and switched on using the switch on the left hand side of the screen, and set into upload mode. The green light on the bottom should be on, and the blue light should be pulsing. If you still get the error, pull the on/off switch down twice in quick succession again to force the Wio Terminal into upload mode and try the upload again.
PlatformIO has a Serial Monitor that can monitor data sent over the USB cable from the Wio Terminal. This allows you to monitor the data sent by the `Serial.println("Hello World");` command.

@ -1,6 +1,6 @@
# Memulai dengan IoT
Pada bagian ini, Anda akan diperkenalkan dengan Internet of Things, dan mempelajari konsep dasar termasuk membangung proyek IoT 'Hello World' pertama Anda yang terhubung ke *cloud*. Proyek ini merupakan lampu malam yang akan menyala saat tingkat pencahayaan diukur dengan penurunan sensor. This project is a nightlight that lights up as light levels measured by a sensor drop.
Pada bagian ini, Anda akan diperkenalkan dengan Internet of Things, dan mempelajari konsep dasar termasuk membangung proyek IoT 'Hello World' pertama Anda yang terhubung ke *cloud*. Proyek ini merupakan lampu malam yang akan menyala saat tingkat pencahayaan diukur dengan penurunan sensor.
![Lampu LED terhubung ke WIO menyala dan mati saat tingkat pencahayaan berubah](../../images/wio-running-assignment-1-1.gif)

@ -0,0 +1,271 @@
# 应用物联网预测植物生长
![这个课程概述的涂鸦笔记sketchnote](../../../../sketchnotes/lesson-5.jpg)
> Sketchnote by [Nitya Narasimhan](https://github.com/nitya). 如果你想看比较大的图片,请点击它。
## 课前测验
[课前测验](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/9)
## 介绍
植物需要一些东西才能生长 - 水,二氧化碳,养分,光照,还有热。在这节课程中,你将会学习怎样通过测量空气温度来计算植物的生长和成熟率。
这节课程将包含:
* [数字农业](#数字农业)
* [为什么温度在耕作中很重要?](#为什么温度在耕作中很重要?)
* [测量环境温度](#测量环境温度)
* [生长度日 (GDD)](#生长度日)
* [用温度传感器数据计算 GDD](#用温度传感器数据计算 GDD)
## 数字农业
通过使用工具来收集、存储和分析耕作数据,数字农业 (Digital Agriculture) 正在改变我们的耕作方式。我们目前正处于被世界经济论坛描述为“第四次工业革命”的时期而数字农业的崛起也被称为“第四次农业革命”或“农业4.0”。
> 🎓 数字农业一词也包括整个“农业价值链”,即从农场到餐桌的整个过程。它包括在食品运输和加工过程中跟踪农产品质量,仓库和电子商务系统,甚至拖拉机租赁应用程序!
这些改变使得农民们能够提高产量,减少肥料和农药的使用,并更有效率地浇水。尽管主要在富裕国家中使用,传感器和其它设备的价格在慢慢降低,使得它们在发展中国家也更容易被使用了。
数字农业所促成的技术包括:
* 温度测量——测量温度使农民能够预测植物的生长和成熟度。
* 自动浇水——测量土壤湿度,在土壤过于干燥时开启灌溉系统,而不是定时浇水。定时浇水可能导致作物在高温干旱时浇水不足,或在下雨时浇水过多。通过只有在土壤需要时才浇水的方式,农民可以优化水资源的使用。
* 虫害控制——农民可以使用自动机器人或无人机上的摄像头来检查虫害,然后只在需要的地方施用农药。这样不仅能减少农药的使用量,也能减少流入当地水源中的农药量。
✅ 做些研究。还有哪些技术是用来提高农业产量的?
> 🎓 “精准农业”一词被用来定义在某块田地,甚至在某块田地的部分区域的尺度上,对作物进行的观察、测量和反应。这包括测量水、养分和虫害程度,并作出准确的反应,例如只对一小部分田地进行浇灌。
>
## 为什么温度在耕作中很重要?
在学习植物时,大多数学生都了解了水、光、二氧化碳 (CO<sub>2</sub>) 和养分的必要性。其实植物的生长也需要温暖——这就是为什么植物在春天随着温度的升高而开花,为什么雪钟花或水仙花会因为短暂的暖流而提前发芽,以及为什么暖房和温室能里的植物生长得很好。
> 🎓 暖房和温室挺类似的,但它们有一个重要区别。暖房是人工加热的,农民能够更准确地控制温度,而温室依靠太阳取暖,通常唯一的控制是利用窗户或其他开口来让热量散发出去。
植物有基础温度或者说最低温度、最佳温度和最高温度,所有这些都基于日平均温度。
* 基础温度 (Base temperature) - 这是植物生长所需的最低日平均温度。
* 最佳温度 (Optimum temperature) - 这是能够使植物获得最多生长的最佳日平均温度。
* 最高温度 (Maximum temperature) - 这是植物可以承受的最高温度。超过这个温度,植物就会停止生长,以节省水分和保持存活。
> 💁 这些都是平均温度,是每日和每夜温度的平均值。植物也需要昼夜不同的温度以帮助它们更有效地进行光合作用并在夜间节省能量。
每种植物都有不同的基础、最佳、最高温度值。这就是为什么一些植物能够在炎热的地区茁壮成长,而另一些则更适应寒冷地区。
✅ 做些研究。对于那些花园、学校或当地公园里的植物,你是否可以找到其基础温度。
![本图展示了生长率随着温度的升高而增长,然后在温度过高时下跌的过程](../../../../images/plant-growth-temp-graph.png)
上图显示了一个生长率与温度关系图的例子。在最低温度之前植物不会生长。随着温度升高生长率增加,并在最佳温度处达到这个峰值,然后下降。在最高温度处,生长停止。
该图的形状因植物种类的不同而不同。有些植物在最佳温度之后有较明显的下降,有些植物从最低温度到最佳温度的增长更加缓慢。
> 💁 对于农民来说,要想让作物长得更好,他们需要知道这三个温度值,并了解他们所种植的作物的图形形状。
如果农民能够控制温度比如在商业暖房中那么他们可以为其作物进行温度的优化。例如一个种植西红柿的商业暖房可以在白天将温度设置为25°C而在晚上设置为20°C这样能够获得最快的生长。
> 🍅 将温控与人工照明、肥料和 CO<sub>2</sub> 水平控制相结合能够能够实现全年的种植和收获。
## 测量环境温度
温度传感器可与物联网设备一起使用来测量环境温度。
### 任务 - 测量温度
通过以下这些相关指南,应用你的物联网设备监测温度:
* [Arduino - Wio Terminal](../wio-terminal-temp.md)
* [单板机 - Raspberry Pi](../pi-temp.md)
* [单板机 - 虚拟设备](../virtual-device-temp.md)
## 生长度日
生长度日 (Growing degree days),也称为生长度单位 (growing degree units),是根据温度衡量植物生长的一种方式。假设一株植物具有足够的水分、养分和二氧化碳,温度将会决定植物的生长率。
生长度日,或称 GDD是以每日中高于植物基础温度的的平均温度摄氏度来计算的。每个植物需要一定数量的生长度日来生长、开花、成熟。每天的 GDD 越多,植物的生长就越快。
> 🇺🇸 For Americans, growing degree days can also be calculated using Fahrenheit. 5 GDD<sup>C</sup> (growing degree days in Celsius) is the equivalent of 9 GDD<sup>F</sup> (growing degree days in Fahrenheit). <= 华氏度计算
GDD 的完整公式有点复杂,大多是情况下使用一个简化方程就能得到一个很好的近似值:
![GDD = T max + T min 除以 2再减去 T base](../../../../images/gdd-calculation.png)
* **GDD** - 生长度日的数量
* **T<sub>max</sub>** - 每日最高温度,单位是摄氏度
* **T<sub>min</sub>** - 每日最低温度,单位是摄氏度
* **T<sub>base</sub>** - 植物的基础温度,单位是摄氏度。
> 💁 T<sub>max</sub> 高于 30°C 或者 T<sub>min</sub> 低于 T<sub>base</sub> 的情况下有所不同,但是我们暂且忽略。
### 例子 - 玉米 🌽
根据品种的不同,玉米大概需要 800 到 2,700 的 GDD 来成熟,基础温度是 10°C。
在高于基础温度的第一天,测量的温度值如下:
| 测量 | 温度 °C |
| :--- | :-----: |
| 最高 | 16 |
| 最低 | 12 |
把这些数字代入公式中:
* T<sub>max</sub> = 16
* T<sub>min</sub> = 12
* T<sub>base</sub> = 10
可得:
![GDD = 16 + 12 除以 2再减去 10得到答案为 4](../../../../images/gdd-calculation-corn.png)
玉米在这一天获得了4 GDD。假设这个品种的玉米需要800 GDD那么它还需要796 GDD 才能成熟。
✅ 做些研究。对于那些花园、学校或当地公园里的植物,你是否能找它们成熟所需的 GDD 数量。
## 用温度传感器数据计算 GDD
植物的生长时间不是固定的——例如你不可能种下一粒种子并知道它会刚好在100天后开花结果。然而作为一个农民你也许有一个生长所需时间的粗略概念然后你每天检查作物是否成熟。
对于一些大型农场来说这是一个巨大的劳动力影响,而且农民有可能错过意外提前成熟的作物。通过测量温度,农民可以计算出植物所累积的 GDD这样可以就能只在接近预期成熟度时进行检查。
通过使用物联网设备收集温度数据,农民可以在植物接近成熟时自动收到通知。这方面的典型架构是让物联网设备测量温度,然后使用类似 MQTT 的协议在互联网上发布这些遥测数据。接着服务器代码监听这些数据并将其保存在某个地方,比如数据库。这意味着之后能够对这些数据进行分析,比如在每晚计算当天的 GDD对每种作物的 GDD 进行累计,如果植物接近成熟就发出警报。
![遥测数据被发送到一个服务器上然后被保存至数据库中](../../../../images/save-telemetry-database.png)
服务器代码也可以通过添加额外的信息来增强数据。例如,物联网设备可通过一个标识符以表明它是哪个设备,而服务器代码可以使用这个标识符来查找设备的位置以及它正在监测哪些作物。还可以添加一些基本数据,如当前时间,因为一些物联网设备没有追踪时间的必要的硬件或者是需要额外的代码来通过互联网读取当前时间。
✅ 你觉得为什么不同地方的温度可能会不同?
### 任务 - 发布温度信息
通过以下这些相关指南,应用你的物联网设备通过 MQTT 发布温度数据,以便之后的分析:
* [Arduino - Wio Terminal](../wio-terminal-temp-publish.md)
* [单板机 - Raspberry Pi/虚拟物联网设备](../single-board-computer-temp-publish.md)
### 任务 - 捕获并存储温度信息
如果物联网设备成功发布遥测数据,就可以开始编写服务器代码来订阅这些数据并将其存储起来。服务器代码将其保存到 CSV 文件中而非使用数据库来存储。CSV文件以文本形式存储数据每个值用逗号隔开每个记录占一行。它是一种方便的、人类可读的、受到良好支持的保存数据为文件的方式。
CSV 文件将有两列 - *时间 (date)*和*温度 (temperature)*。*时间*列将存储服务器收到消息时的日期和时间,*温度*列存储遥测信息。
1. 重复第4课的步骤创建服务器代码以订阅遥测数据。你不需要添加代码来发布命令。
具体步骤:
* 配置并激活一个 Python 虚拟环境
* 安装 paho-mqtt pip 包
* 编写代码来监听发布在遥测主题上的 MQTT 消息
> ⚠️ 如果需要的话你可以参考 [课程 4 中关于创建 Python 应用来接受遥测数据的说明](../../../../1-getting-started/lessons/4-connect-internet/README.md#receive-telemetry-from-the-mqtt-broker)。
这个项目的文件夹名是 `temperature-sensor-server`
1. 确保 `client_name` 反映该项目:
```cpp
client_name = id + 'temperature_sensor_server'
```
1. 在文件开头,已有导入的下方,添加下列导入:
```python
from os import path
import csv
from datetime import datetime
```
这将会导入一个用于读取文件的库,一个与 CSV 文件交互的库,和一个关于日期和时间的库。
1. 添加下面的代码至 `handle_telemetry` 函数前:
```python
temperature_file_name = 'temperature.csv'
fieldnames = ['date', 'temperature']
if not path.exists(temperature_file_name):
with open(temperature_file_name, mode='w') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
```
这段代码声明了一些用于写入文件的文件名和 CSV 文件列标题名的常量。传统上CSV 文件的第一行包含由逗号分隔的列标题。
然后代码会检查 CSV 文件是否已经存在。如果不存在,则在第一行创建列标题。
1. 添加下面的代码至 `handle_telemetry` 函数末尾:
```python
with open(temperature_file_name, mode='a') as temperature_file:
temperature_writer = csv.DictWriter(temperature_file, fieldnames=fieldnames)
temperature_writer.writerow({'date' : datetime.now().astimezone().replace(microsecond=0).isoformat(), 'temperature' : payload['temperature']})
```
这段代码会打开 CSV 文件,然后在末尾添加一个新行。这一行会包含当前的日期和时间(可阅读格式),紧跟着从物联网设备中接收到的温度。时间数据将以 [ISO 8601 format](https://wikipedia.org/wiki/ISO_8601) 进行保存,包含时区,但是不包含毫秒。
1. 以与之前相同的方式运行此代码,确保你的物联网设备正在发送数据。一个名为 `temperature.csv` 的 CSV 文件将在同一文件夹中创建。如果你查看它,你应该能看到日期/时间和温度数据:
```output
date,temperature
2021-04-19T17:21:36-07:00,25
2021-04-19T17:31:36-07:00,24
2021-04-19T17:41:36-07:00,25
```
1. 运行这段代码一段时间以获取数据。理想情况下,你应该运行它一整天来收集足够的数据用于 GDD 的计算。
> 💁 如果你正在使用虚拟物联网设备,选择随机复选框并设置一个范围来避免每次返回温度时都得到同样的值。
> ![Select the random checkbox and set a range](../../../../images/select-the-random-checkbox-and-set-a-range.png)
> 💁 如果你想运行一整天,那么你需要确保用于服务器代码运行的电脑不会进入休眠,你可以改变电源设置,或者运行 [这个保持系统活跃的 Python 脚本](https://github.com/jaqsparow/keep-system-active)。
> 💁 你可以在 [code-server/temperature-sensor-server](../code-server/temperature-sensor-server) 文件夹内找到需要的代码。
### 任务 - 使用存储的数据计算出 GDD
一旦服务器采集了温度数据,就可以计算出植物的 GDD。
手动操作的步骤是:
1. 找到该植物的基础温度。例如对于草莓来说基础温度是10℃
1. 根据 `temperature.csv`,找到一天中的最低温度和最高温度
1. 使用之前给出的公式来计算 GDD
例如,如果这一天最高温度是 25°C最低温度是 12°C
![GDD = 25 + 12 除以 2然后减去 10 得到 8.5](../../../../images/gdd-calculation-strawberries.png)
* 25 + 12 = 37
* 37 / 2 = 18.5
* 18.5 - 10 = 8.5
所以草莓获得了 **8.5** GDD。草莓需要大概 250 GDD 来结果,看来还得等一会儿呢。
---
## 🚀 挑战
植物的生长,除了热量以外,还需要些什么?
对于这些(其它因素),寻找是否有可以测量它们的传感器。那么控制它们水平的执行器呢?你会如何把一个或多个物联网设备放在一起,以优化植物的生长?
## 课后测验
[课后测验](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/10)
## 复习 & 自学
* 在 [Digital Agriculture Wikipedia page](https://wikipedia.org/wiki/Digital_agriculture) 上阅读更多关于数字农业的知识。在 [Precision Agriculture Wikipedia page](https://wikipedia.org/wiki/Precision_agriculture) 上阅读更多关于精准农业的知识。
* 完整的生长度日计算比这里给出的简化计算更复杂。在 [Growing Degree Day Wikipedia page](https://wikipedia.org/wiki/Growing_degree-day) 上查看更复杂的方程以及处理低温条件的方法。
* 即使我们仍然使用相同的耕作方法,未来的食物也可能是稀缺的。在 [Hi-Tech Farms of Future video on YouTube](https://www.youtube.com/watch?v=KIEOuKD9KX8) 上了解更多高科技种植手段。
## 作业
[使用 Jupyter Notebook 进行 GDD 数据的可视化](../assignment.md)

@ -18,7 +18,7 @@ In this lesson we'll cover:
* [Control a relay](#control-a-relay)
* [Control your plant over MQTT](#control-a-relay)
* [Sensor and actuator timing](#sensor-and-actuator-timing)
* [Add timing to your plant control](#add-timing-to-your-plant-control)
* [Add timing to your plant control server](#add-timing-to-your-plant-control-server)
## Control high power devices from a low power IoT device

@ -0,0 +1,20 @@
# 应用物联网至农业
随着人口增加对于农业的需求也一并增加。可用的土地数量保持不变但是气候却不断变化——这给农民们带来了更多的挑战尤其是那20亿依赖于亲自耕种以养活自己和家庭的[自耕农](https://wikipedia.org/wiki/Subsistence_agriculture)。物联网可以帮助农民们做出更加聪明的决定,比如耕种何种作物、何时收获,并且帮助他们增产、减少劳力、检测和处理害虫。
在这6节课程中你将会学到怎样应用物联网去改进和自动化农业生产。
> 💁 这些课程将会使用一些云端资源。如果你没有完成这个项目的所有课程,请确保你[清理你的项目](../clean-up.md).
## 主题
1. [应用物联网预测植物生长](lessons/1-predict-plant-growth/translations/README.zh-cn.md)
1. [检测土壤湿度](lessons/2-detect-soil-moisture/README.md)
1. [自动给植物浇水](lessons/3-automated-plant-watering/README.md)
1. [将你的植物迁移到云端](lessons/4-migrate-your-plant-to-the-cloud/README.md)
1. [将你的应用程序逻辑迁移到云端](lessons/5-migrate-application-to-the-cloud/README.md)
1. [确保你的植物安全](lessons/6-keep-your-plant-secure/README.md)
## 作者
所有课程均由 [Jim Bennett](https://GitHub.com/JimBobBennett) 用 ♥️ 编写。

@ -1,9 +0,0 @@
# Dummy File
This file acts as a placeholder for the `translations` folder. <br>
**Please remove this file after adding the first translation**
For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) .
## THANK YOU
We truly appreciate your efforts!

@ -0,0 +1,238 @@
# খাদ্যপণ্যের গুণমান সনাক্তকারী মডেলকে ট্রেনিং প্রদান
![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-15.jpg)
> স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya)। বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে।
এই ভিডিওটি Azure কাস্টম ভিশন সার্ভিসর একটি সংক্ষিপ্ত বিবরণ দেয়, যা এই পাঠে আমরা বিস্তারিত জানবো।
[![Custom Vision Machine Learning Made Easy | The Xamarin Show](https://img.youtube.com/vi/TETcDLJlWR4/0.jpg)](https://www.youtube.com/watch?v=TETcDLJlWR4)
> 🎥 উপরের ছবিতে ক্লিক করে ভিডিওটি দেখে নিই
## লেকচার-পূর্ববর্তী কুইজ
[লেকচার-পূর্ববর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/29)
## সূচনা
কৃত্রিম বুদ্ধিমত্তা (এআই) এবং মেশিন লার্নিং (এমএল) -এর সাম্প্রতিক উন্নতি আজকের ডেভেলপারদের বিস্তৃত ক্ষমতা প্রদান করছে। এমএল মডেলগুলিকে চিত্রের বিভিন্ন জিনিস চিনতে প্রশিক্ষণ দেওয়া যেতে পারে যেমন অপরিপক্ক ফল সনাক্তকরণ এবং এটি আইওটি ডিভাইসেও ব্যবহার করা যেতে পারে ।
এই পাঠে আমরা ইমেজ বা ছবির শ্রেণিবিন্যাস সম্পর্কে জানতে পারব - এমএল মডেল ব্যবহার করে বিভিন্ন জিনিসের ছবির মধ্যে পার্থক্য করা ছাড়াও কিভাবে একটি ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ দিতে হয় যে ফলটি ভাল এবং খারাপ ফল তা জানবো।
এই পাঠে আমরা শিখবো :
* [AI এবং ML দ্বারা পণ্য শ্রেনিবদ্ধকরণ](#AI-এবং-ML-দ্বারা-পণ্য-শ্রেনিবদ্ধকরণ)
* [মেশিন লার্নিং দ্বারা ছবি চিহ্নিতকরণ](#মেশিন-লার্নিং-দ্বারা-ছবি-চিহ্নিতকরণ)
* [ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ প্রদান](#ইমেজ-ক্লাসিফায়ারকে-প্রশিক্ষণ-প্রদান)
* [ইমেজ ক্লাসিফায়ারকে টেস্ট করা](#ইমেজ-ক্লাসিফায়ারকে-মূল্যায়ণ)
* [ইমেজ ক্লাসিফায়ারকে পুনরায় প্রশিক্ষণ প্রদান](#ইমেজ-ক্লাসিফায়ারকে-পুনরায়-প্রশিক্ষণ)
## AI এবং ML দ্বারা পণ্য শ্রেনিবদ্ধকরণ
বিশ্বব্যাপী জনসাধারণের খাদ্যের যোগান দেয়া কঠিন, বিশেষত কমদামে দামে সহজলভ্য করে সরবরাহ করা। সবচেয়ে বড় খরচ হল শ্রম, তাই কৃষকরা তাদের শ্রম খরচ কমাতে ক্রমবর্ধমান অটোমেশন এবং আইওটি এর মতো সরঞ্জামগুলির দিকে ঝুঁকছেন। হাতে ফসল তোলা খুবই শ্রমসাধ্য কাজ যা যন্ত্রপাতি দ্বারা প্রতিস্থাপিত হচ্ছে, বিশেষত ধনী দেশগুলিতে। ফসল কাটার জন্য যন্ত্রপাতি ব্যবহারের খরচ বাঁচানো সত্ত্বেও, একটি নেতিবাচক দিক রয়েছে - খাদ্য সংগ্রহ করার সময় ফসল সঠিকভাবে সাজানো (sort করা)।
সব ফসল সমানভাবে পরিপক্ব হয়না। উদাহরণস্বরূপ, টমেটো ক্ষেতে কিছু কিছু সবুজ ফল থাকতেই এই ফসল তোলার জন্য প্রস্তুত থাকে। যদিও তাড়াতাড়ি ফসল তোলা অপচয়, তবুও কৃষকের জন্য যন্ত্রপাতি ব্যবহার করে সব ফসল সংগ্রহ করা এবং পরবর্তীতে অপরিপক্ক ফসলের নিষ্পত্তি করা সস্তা এবং সহজ।
✅ আমাদের কাছাকাছি খামারে বা আমাদের বাগানে বা দোকানে থাকা বিভিন্ন ফল বা সবজি পর্যবেক্ষণ করি। সেগুলি কি একই রকম পরিপক্ক নাকি বৈচিত্র দেখা যাচ্ছে ?
স্বয়ংক্রিয় পদ্ধতিতে ফসল তোলার ফলে, উৎপাদিত পণ্যের শ্রেণিবিন্যাস কার্যক্রম বর্তমানে কারখানায় হয়ে থাকে। খাদ্য লম্বা কনভেয়ার বেল্ট দিয়ে যাবে এবং শ্রমিকেরা নিম্নমানের পণ্য অপসারণ করবে। যন্ত্রপাতির কল্যাণে ফসল কাটা ও সংগ্রহ করার ক্ষেত্রে খরচ কম ছিল, কিন্তু ম্যানুয়ালি পণ্য বাছাই করা অতিরিক্ত খরচ ও শ্রমের কাজ।
![If a red tomato is detected it continues its journey uninterrupted. If a green tomato is detected it is flicked into a waste bin by a lever](../../../../images/optical-tomato-sorting.png)
এই যাত্রায় পরবর্তী বিবর্তন ছিল মেশিনগুলিকে বাছাই করার জন্য ব্যবহার করা, হয় হার্ভেস্টারে নির্মিত অথবা প্রক্রিয়াকরণ কারখানায়। এই মেশিনের প্রথম প্রজন্ম অপটিক্যাল সেন্সর ব্যবহার করে রং সনাক্ত করে, অ্যাকচুয়েটরগুলিকে নিয়ন্ত্রণ করে সবুজ টমেটোকে একটি পাত্রে ধাক্কা দিয়ে ফেলে দিতো, বাতাসের লিভার বা পফ ব্যবহার করে। আবার লাল টমেটো গুলোকে ছেড়ে দিতো যাতে তারা কনভেয়র বেল্টে এগিয়ে যেতে থাকে।
নীচের ভিডিওটি এই মেশিনগুলির মধ্যে একটিকে দেখায়।
[![Automatic sorting of tomatoes via color](https://img.youtube.com/vi/AcRL91DouAU/0.jpg)](https://www.youtube.com/watch?v=AcRL91DouAU)
> 🎥 উপরের ছবিতে ক্লিক করে ভিডিওটি দেখে নিই
এই ভিডিওতে, টমেটো যখন একটি পরিবাহক বেল্ট (conveyer belt) থেকে অন্যটিতে যায়, সবুজ টমেটো সনাক্ত করা হয় এবং লিভারের সাহায্যে একটি আলাদা পাত্রে সরিয়ে ফেলা হয়।
✅ এই অপটিক্যাল সেন্সরগুলি সঠিকভাবে কাজ করার জন্য কারখানায় বা খেতে কেমন অবস্থার প্রয়োজন হবে?
এই বাছাই মেশিনের সর্বশেষ বিবর্তন এআই এবং এমএল এর সুবিধা গ্রহণ করে, ভাল পণ্যকে খারাপ থেকে আলাদা করার জন্য প্রশিক্ষিত মডেলগুলি ব্যবহার কর। এটি কেবলমাত্র সবুজ টমেটো বনাম লাল রঙের সুস্পষ্ট রঙের পার্থক্য দ্বারা নয়, বরং পণ্যের অবস্থা থেকে আরও সূক্ষ্ম পার্থক্য ধরতে পারে যা রোগ বা ক্ষত নির্দেশ করে ।
## মেশিন লার্নিং দ্বারা ছবি চিহ্নিতকরণ
সার্বজনীনভাবে প্রোগ্রামিং হলো এমন একটি কার্যক্রম যেখানে আমরা ডেটা গ্রহণ করি, ডেটাতে একটি অ্যালগরিদম প্রয়োগ এবং আউটপুট পাই। উদাহরণস্বরূপ, গত প্রজেক্টে আমরা জিপিএস কোঅর্ডিনেটস এবং একটি জিওফেন্স নিয়েছি্লাম, একটি অ্যালগরিদম প্রয়োগ করা হয়েছিলো যা Azure ম্যাপ দ্বারা সরবরাহ করা হয়েছিল এবং জিওফেন্সের ভিতরে বা বাইরে পয়েন্ট থাকলে তার ফলাফল পেয়েছিলাম। আমরা আরও ডেটা ইনপুট নিলে, আমরা আরও বেশি আউটপুট পাব।
![Traditional development takes input and an algorithm and gives output. Machine learning uses input and output data to train a model, and this model can take new input data to generate new output](../../../../images/traditional-vs-ml.png)
মেশিন লার্নিং এটিকে সম্পূর্ণ উল্টোদিক থেকে করে - আমরা ডেটা এবং পরিচিত আউটপুট দিয়ে শুরু করি এবং মেশিন লার্নিং অ্যালগরিদম সেই সংগৃহীত ফলাফলের ডেটা থেকে শিখে যে তাকে কী করতে হবে। তারপর আমরা সেই প্রশিক্ষিত অ্যালগরিদম নিতে পারি, যাকে বলা হয় *মেশিন লার্নিং মডেল* বা শুধুমাত্র *মডেল*, এবং এটিতে নতুন ডেটা ইনপুট করে আমরা নতুন আউটপুট পাব।
> 🎓 তথ্য থেকে মেশিন লার্নিং অ্যালগরিদম শেখার প্রক্রিয়াকে বলা হয় *প্রশিক্ষণ (training)*। ইনপুট এবং পরিচিত আউটপুটগুলিকে *প্রশিক্ষণ ডেটা (training data)*বলা হয়।
উদাহরণস্বরূপ, ইনপুট ট্রেনিং ডেটা হিসাবে আমরা একটি মডেলকে কাঁচা কলা এর কয়েক লক্ষ ছবি দিতে পারি, প্রশিক্ষণ আউটপুটকে `কাঁচা` হিসাবে সেট করতে পারি, এবং একইভাবে লক্ষ লক্ষ পাকা কলার ছবিগুলিকে প্রশিক্ষণ ডেটা হিসাবে আউটপুট সেট `পাকা` হিসাবে সেট করতে পারি। এমএল অ্যালগরিদম তারপর এই ডেটা ভিত্তিক একটি মডেল তৈরি করবে। আমরা তারপর এই মডেলটিকে যেকোন একটি কলার একটি নতুন ছবি দিলে, এটি জানাবে যে নতুন ছবিটি একটি পাকা নাকি কাঁচা কলা।
> 🎓 এমএল মডেলের ফলাফলকে বলা হয় *পূর্বাভাস (predictions)*
![2 bananas, a ripe one with a prediction of 99.7% ripe, 0.3% unripe, and an unripe one with a prediction of 1.4% ripe, 98.6% unripe](../../../../images/bananas-ripe-vs-unripe-predictions.png)
এমএল মডেলগুলি বাইনারি উত্তর দেয় না, বরং তারা সম্ভাব্যতা দেয়। উদাহরণস্বরূপ, একটি মডেলকে একটি কলার ছবি দেওয়া হলে এবং `পাকা` তে ৯৯.% এবং `কাঁচা` তে .০৩% এর রেজাল্ট দিতে পারে। আমাদের কোড তারপর সেই পূর্বাভাস বাছাই করবে এবং কলা পাকা - এই সিদ্ধান্ত নেবে।
এইরকম ছবি সনাক্ত করতে ব্যবহৃত এমএল মডেলটিকে বলা হয় *ইমেজ ক্লাসিফায়ার* - এটিকে লেবেলযুক্ত ছবি দেওয়া হয় এবং তারপরে এই লেবেলগুলির ভিত্তিতে নতুন চিত্রগুলি শ্রেণিবদ্ধ করা হয়।
> 💁 এটি একটি অতি-সরলীকরণ ব্যখ্যা এবং মডেলগুলিকে প্রশিক্ষণ দেওয়ার আরও অনেক উপায় রয়েছে যা সর্বদা লেবেলযুক্ত আউটপুটগুলির প্রয়োজন হয় না, যেমন unsupervised learning প্রক্রিয়া। আমরা যদি এমএল সম্পর্কে আরও জানতে চাই, তাহলে [মেশিন লার্নিং এর ২৪ লেসনের কারিক্যুলামটি](https://aka.ms/ML-beginners) দেখি।
## ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ প্রদান
একটি ইমেজ ক্লাসিফায়ার সফলভাবে প্রশিক্ষণের জন্য আমাদের লক্ষ লক্ষ ইমেজ প্রয়োজন। যেমন দেখা যাচ্ছে, একবার আমাদের লক্ষ লক্ষ বা কোটি কোটি ইমেজের উপর প্রশিক্ষণপ্রাপ্ত একটি ইমেজ ক্লাসিফায়ার হয়ে গেলে, আমরা এটি পুনরায় ব্যবহার করতে পারি এবং ছবিগুলির একটি ছোট সেট ব্যবহার করে পুনরায় প্রশিক্ষণ দিতে পারি এবং *ট্রান্সফার লার্নিং* নামক একটি প্রক্রিয়া ব্যবহার করে দুর্দান্তরকমের এক্যুরেট ফলাফল পেতে পারি। ।
> 🎓 ট্রান্সফার লার্নিং হল এমন প্রক্রিয়া যেখানে আমরা একটি বিদ্যমান এমএল মডেল থেকে নতুন ডেটা ভিত্তিক নতুন মডেলে আগের লার্নিং ট্রান্সফার করি।
একবার ইমেজ ক্লাসিফায়ারকে বিভিন্ন ধরণের চিত্রের জন্য প্রশিক্ষণ দেওয়া হলে, এর অভ্যন্তরীণ আকার, রঙ এবং নিদর্শনগুলি সনাক্ত করতে বেশ পারদর্শী হয়ে যায়। ট্রান্সফার লার্নিং এর দ্বারা মডেলটি ইমেজ পার্টস এর ইতিমধ্যে যা শিখেছে তা নিতে এবং নতুন ইমেজ চিনতে বেশ সুবিধা হয়।
![Once you can recognize shapes, they can be put into different configurations to make a boat or a cat](../../../../images/shapes-to-images.png)
আমরা এটিকে ছোটদেরকে আকার-আকৃতি চেনানোর জন্য ছবির বইয়ের মতো মনে করতে পারি, যেখানে একবার আমরা একটি অর্ধ-বৃত্ত, একটি আয়তক্ষেত্র এবং একটি ত্রিভুজ চিনতে পারিদ। আমরা এই আকারগুলির কনফিগারেশনের উপর নির্ভর করে একটি পাল তোলা নৌকা বা একটি বিড়ালকে চিনতে পারি। ইমেজ ক্লাসিফায়ার আকার চিনতে পারে এবং ট্রান্সফার লার্নিং এটি শেখায় যে কী কী সমন্বয় করে একটি নৌকা বা একটি বিড়াল তৈরি করে - অথবা একটি কীভাবে একটি পাকা কলা পাওয়া যায়।
ক্লাউড-ভিত্তিক সার্ভিসগুলি যা আমাদেরকে আমাদের মডেলকে প্রশিক্ষণ দিতে সাহায্য করে। তারপর ওয়েব এপিআইয়ের মাধ্যমে এটি ব্যবহার করতে পারি।
> 💁 এই মডেলগুলিকে প্রশিক্ষণ দিতে প্রচুর কম্পিউটার রিসোর্স লাগে, সাধারণত গ্রাফিক্স প্রসেসিং ইউনিট বা জিপিইউ এর মাধ্যমে তা করা হয়। এটি সেই বিশেষ হার্ডওয়্যার যা আমাদের এক্সবক্সে গেমগুলি চালায়। মেশিন লার্নিং মডেলগুলি প্রশিক্ষণের জন্যও এটি ব্যবহার করা যেতে পারে। ক্লাউড ব্যবহার করে আমরা এই মডেলগুলিকে প্রশিক্ষণের জন্য জিপিইউ সহ শক্তিশালী কম্পিউটারের রিসোর্স পেতে পারি, আমাদের প্রয়োজনীয় কম্পিউটিং পাওয়ার এর অ্যাক্সেস পেতে পারি, কেবল আমাদের প্রয়োজনীয় সময়ের জন্য - এতে করে আমাদের খরচও কম, কাজও হয়ে যাবে।
## কাস্টম ভিশন
কাস্টম ভিশন হল ইমেজ ক্লাসিফায়ার প্রশিক্ষণের জন্য একটি ক্লাউড ভিত্তিক টুল। এটি আমাদেরকে অল্প সংখ্যক চিত্র ব্যবহার করে একটি ক্লাসিফায়ার প্রশিক্ষণ দেওয়ার অনুমতি দেয়। আমরা একটি ওয়েব পোর্টাল, ওয়েব এপিআই বা একটি এসডিকে এর মাধ্যমে ছবি আপলোড করতে পারি, প্রতিটি ইমেজকে একটি *ট্যাগ* দিতে পারি যেটি সেই ছবির শ্রেণিবিন্যাস নির্দেশ করে। তারপরে আমরা মডেলটিকে প্রশিক্ষণ দিব এবং এটি কতটা ভাল কাজ করে তা পরীক্ষা করে দেখব। একবার আমরা মডেলটি নিয়ে সন্তুষ্ট হলে, আমরা এর সংস্করণগুলি প্রকাশ করতে পারি যা একটি ওয়েব API বা SDK এর মাধ্যমে ব্যবহার করা যায়।
![The Azure Custom Vision logo](../../../../images/custom-vision-logo.png)
> 💁 একটি কাস্টম ভিশন মডেলকে প্রতি শ্রেণিবিন্যাসের জন্য কমপক্ষে 5টির মতো প্রশিক্ষণ ছবি দিতে পারি, তবে যত বেশী দিতে পারবো, তত ভালো। উন্নত ফলাফলের জন্য কমপক্ষে 30 টি ছবি দেয়া উচিত।
কাস্টম ভিশন মাইক্রোসফটের কগনিটিভ সার্ভিস নামে পরিচিত এআই টুলের একটি অংশের অংশ। এগুলি হল এআই টুলস যা কোনো প্রশিক্ষণ ছাড়াই ব্যবহার করা যেতে পারে অথবা অল্প পরিমাণে প্রশিক্ষণ দিয়ে ব্যবহার করা যেতে পারে। এর মধ্যে রয়েছে speech recognition, অনুবাদ, ভাষা বোঝা এবং চিত্র বিশ্লেষণ। এগুলি Azure সার্ভিস হিসাবে উপলব্ধ আছে, Free tier এ।
> 💁 বিনামূল্যে স্তর বা Free tier একটি মডেল তৈরি করা, প্রশিক্ষণ দেওয়া, তারপর উন্নয়ন কাজের জন্য এটি ব্যবহার করার জন্য যথেষ্ট। [মাইক্রোসফট ডকস এ কাস্টম ভিশন এর লিমিট এবং কোটা - এই পেইজে](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/limits-and-quotas?WT.mc_id=academic-17441-jabenn) বিনামূল্যে স্তর (Free tier) সম্পর্কে আমরা পড়তে পারি
### কাজ - কগনিটিভ সার্ভিস রিসোর্স তৈরী
কাস্টম ভিশন ব্যবহার করার জন্য, আমাদেরকে প্রথমে Azure CLI ব্যবহার করে Azure- এ দুটি cognitive services resources তৈরি করতে হবে, একটি কাস্টম ভিশন প্রশিক্ষণের জন্য এবং একটি কাস্টম ভিশন ফলাফলের জন্য।
1. একটি রিসোর্স গ্রুপ তৈরী করি যার নাম `fruit-quality-detector`
1. একটি বিনামূল্যে কাস্টম ভিশন প্রশিক্ষণ রিসোর্স তৈরি করতে নিম্নলিখিত কমান্ডটি ব্যবহার ্করি:
```sh
az cognitiveservices account create --name fruit-quality-detector-training \
--resource-group fruit-quality-detector \
--kind CustomVision.Training \
--sku F0 \
--yes \
--location <location>
```
`<location>` এর স্থলে রিসোর্স গ্রুপ তৈরীতে যে লোকেশোন দেয়া হয়েছে তা বসাই।
এটি আমাদের রিসোর্স গ্রুপে একটি কাস্টম ভিশন ট্রেনিং রিসোর্স তৈরি করবে। এটিকে নাম দেয়া হবে `fruit-quality-detector-training` (ফলের-গুণ-সনাক্তকারী-প্রশিক্ষণ) এবং `F0` sku ব্যবহার করি, যা বিনামূল্য স্তরে পাওয়া যায়। `--yes` অপশনের অর্থ হল কগনিটিভ সার্ভিসের শর্তাবলীতে আমরা সম্মত।
> 💁 আমরা যদি ইতিমধ্যে কোন ফ্রী একাউন্ট থেকে কগনিটিভ সার্ভিস ব্যবহার করে থাকি, তাহলে `S0` sku ব্যবহার করতে হবে।
1. একটি বিনামূল্যে কাস্টম ভিশন প্রেডিকশোন রিসোর্স তৈরি করতে নিম্নলিখিত কমান্ডটি ব্যবহার করি:
```sh
az cognitiveservices account create --name fruit-quality-detector-prediction \
--resource-group fruit-quality-detector \
--kind CustomVision.Prediction \
--sku F0 \
--yes \
--location <location>
```
`<location>` এর স্থলে রিসোর্স গ্রুপ তৈরীতে যে লোকেশোন দেয়া হয়েছে তা বসাই।
এটি আমাদের রিসোর্স গ্রুপে একটি কাস্টম ভিশন ্প্রেডিকশন রিসোর্স তৈরি করবে। এটিকে বলা হবে `fruit-quality-detector-prediction` এবং 'F0' স্কু ব্যবহার করি, যা ফ্রী। `-yes` অপশনের অর্থ হল কগনিটিভ সার্ভিসের শর্তাবলীতে আমরা সম্মত।
### কাজ - ইমেজ ক্লাসিফায়ার প্রজেক্ট তৈরী
1. Custom Vision portal চালু করি [CustomVision.ai](https://customvision.ai) এবুং Azure এর জন্য ব্যবহৃত মাইক্রোসফট একাউন্টে লগিন করি।
1. এখন [একটি ক্লাসিফায়ার নির্মাণের জন্য নতুন প্রজেক্ট তৈরি করার প্রক্রিয়া - Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#create-a-new-project) পড়ে নতুন কাস্টম ভিশন প্রজেক্ট নির্মাণ করি।
প্রজেক্টের নাম দিই `fruit-quality-detector`.
আমরা এখন আমাদের প্রজেক্ট তৈরি করি, আমাদের আগে তৈরি করা `fruit-quality-detector-training` রিসোর্স ব্যবহার করতে হবে। একটি *ক্লাসিফিকেশন* প্রজেক্ট টাইপ, একটি *মাল্টিক্লাস* ক্লাসিফিকেশন টাইপ এবং *ফুড* ডোমেইন ব্যবহার করি।
![The settings for the custom vision project with the name set to fruit-quality-detector, no description, the resource set to fruit-quality-detector-training, the project type set to classification, the classification types set to multi class and the domains set to food](../../../../images/custom-vision-create-project.png)
✅ ইমেজ ক্লাসিফায়ারের জন্য কাস্টম ভিশন ইউআই এক্সপ্লোর করার জন্য কিছু সময় নিই।
### কাজ - ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ প্রদান
একটি ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ দেওয়ার জন্য, আমাদের ভাল এবং খারাপ উভয় গুণের ফলের একাধিক ছবি প্রয়োজন হবে, যেমন একটি পাকা এবং একটি অতিরিক্ত পাকা কলা।
> 💁এই ক্লাসিফায়ারগুলো যেকোনো কিছুর ছবিকে শ্রেণীবদ্ধ করতে পারে। তাই যদি আমাদের কাছে ভিন্ন মানের ফল না থাকে তবে আমরা অন্য যেকোন দুটি ভিন্ন ধরনের ফল ব্যবহার করতে পারেন, অথবা বিড়াল এবং কুকুর - এই ধর০ণের ক্লাসিফিকেশনও করতে পারি!
আদর্শভাবে প্রতিটি ছবিতে শুধু ফল থাকা উচিত, যার মধ্যে একটি সামঞ্জস্যপূর্ণ ব্যাকগ্রাউণ্ড , অথবা বিভিন্ন প্রকারের ব্যাকগ্রাউণ্ড থাকতে হবে। নিশ্চিত করি যে ব্যাকগ্রাউণ্ড এ এমন কিছু নেই যা পাকা বনাম কাঁচা ফলের সনাক্তকরণে প্রভাব ফেলবে।
> 💁 নির্দিষ্ট ব্যাকগ্রাউণ্ড বা নির্দিষ্ট আইটেম না থাকাই ভালো যা ক্লাসিফায়ারের জন্য অপ্রাসঙ্গিক, অন্যথায় ক্লাসিফায়ারের কেবল ব্যাকগ্রাউণ্ড এর উপর ভিত্তি করে শ্রেণীবদ্ধ করতে পারে। ত্বকের ক্যান্সারের জন্য একটি ক্লাসিফায়ার ছিল যা মোলগুলির স্বাভাবিক এবং ক্যান্সারযুক্ত উভয় এর জন্য প্রশিক্ষিত ছিল। ক্যান্সারযুক্ত মোলের ছবিতে আকার পরিমাপের জন্য সেখানে স্কেল রাখা ছিলো। এটি দেখা যায় যে, ক্লাসিফায়ারের ছবিগুলিতে স্কেল্গুলোকে চিহ্নিত করার ক্ষেত্রে প্রায় 100% নির্ভুল ছিল, কিন্তু সত্যিকারের ক্যান্সারযুক্ত মোল এর ক্ষেত্রে (ছবিতে স্কেল না রেখে) তা ততটা ভালো প্রেডিকশন দিতে পারেনি।।
ইমেজ ক্লাসিফায়ার খুব কম রেজ্যুলেশনে চলে। উদাহরণস্বরূপ, কাস্টম ভিশন 10240x10240 পর্যন্ত প্রশিক্ষণ এবং ভবিষ্যদ্বাণী চিত্র গ্রহণ করতে পারে, কিন্তু 227x227 রেজ্যুলেশনে চিত্রগুলিতে মডেলটি প্রশিক্ষণ এবং রান করে। বড় আকারের ছবিগুলি এই আকারে সঙ্কুচিত হয়, তাই আমাদেরকে নিশ্চিত করতে হবে যে আমরা যে জিনিসটি শ্রেণিবদ্ধ করছি তা চিত্রের একটি বড় অংশ দখল করে অন্যথায় এটি ক্লাসিফায়ার দ্বারা পরিবর্তিত ছোট ছবিতে খুবই ছোট হয়ে যেতে পারে।
1. আমাদের ক্লাসিফায়ারের জন্য ছবি সংগ্রহ করতে হবে। ক্লাসিফায়ারকে প্রশিক্ষণের জন্য আমাদেরকে প্রতিটি লেবেলের কমপক্ষে .৫ টি ছবির প্রয়োজন হবে, তবে বেশি হলে আরও ভাল। ক্লাসিফায়ার পরীক্ষা করার জন্য আমাদের কয়েকটি অতিরিক্ত চিত্রেরও প্রয়োজন হবে। এই ছবিগুলি সব একই জিনিসের ভিন্ন চিত্র হওয়া উচিত। উদাহরণ স্বরূপ:
* ২টি পাকা কলা নিয়ে, কয়েকটি ভিন্ন অবস্থান থেকে প্রত্যেকটির কিছু ছবি তুলি, কমপক্ষে টি ছবি তুলতে হবে (৫ টি প্রশিক্ষণ, ২টি পরীক্ষা)। কিন্তু আরও বেশি ছবি তুলতে পারলে ভালো।
![Photos of 2 different bananas](../../../../images/banana-training-images.png)
* ২টি কাঁচা কলা একই কাজটি আবারও করি।
আমাদের কমপক্ষে ১০টি প্রশিক্ষণ চিত্র থাকতে হবে, যার মধ্যে কমপক্ষে ৫ টি পাকা এবং ৫ টি কাঁচা এবং টি পরীক্ষার চিত্র, যেখানে ২টি পাকা, ২টি কাঁচা। আমাদের ছবিগুলি png বা jpegs হওয়া উচিত যা 6MB এর চেয়ে ছোট। যদি আমরা সেগুলোকে আইফোন দিয়ে ধারণ করি, উদাহরণস্বরূপ সেগুলো হতে পারে উচ্চ রেজোলিউশনের HEIC ছবি, তাই রূপান্তর করতে হবে এবং সম্ভবত সঙ্কুচিত হতে হবে। মনে রাখতে হবে, যত বেশি ছবি তত ভাল এবং আমাদের একই সংখ্যক পাকা এবং কাঁচা ্কলার ছবি থাকতে হবে।
যদি আমাদের পাকা এবং কাঁচা উভয় ফলই না থাকে, তাহলে আমরা বিভিন্ন ফল, অথবা আমাদের কাছে থাকা যেকোনো দুটি বস্তু ব্যবহার করতে পারব। আমরা পাকা এবং কাঁচা কলাগুলির [images](./images) ফোল্ডারে কিছু উদাহরণ চিত্র খুঁজে পাব যা আমরা ব্যবহার চাইলে করতে পারি।
1. এক্ষেত্রে সহজে অনুসরণযোগ্য গাইড হিসেবে [ক্লাসিফায়ারের জন্য ছবি আপলোড ও ট্যাগ](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#upload-and-tag-images) ্দেখতে পারি। পাকা কলাকে `ripe` এবং কাঁচাগুলোকে `unripe` হিসেবে ট্যাগ দিই।
![The upload dialogs showing the upload of ripe and unripe banana pictures](../../../../images/image-upload-bananas.png)
1. এখন [ক্লাসিফায়ারের ট্রেনিং কুইকস্টার্ট গাইড ](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#train-the-classifier) দেখে ট্রেনিং সম্পন্ন করি।
ট্রেনিং টাইপের জন্য **Quick Training** নির্বাচন করি।
> 🍌 ক্লাসিফায়ার প্রশিক্ষণ চলাকালীন যদি এই ফলগুলো খাওয়ার চিন্তা মাথায় আসে, তাহলে আগেই যথেষ্ট সংখ্যক ছবি তুলে রাখি !
## ইমেজ ক্লাসিফায়ারকে মূল্যায়ণ
একবার এই ক্লাসিফায়ার ট্রেইনড হয়ে গেলে, এটিতে ছবি চিহ্নিতকরণের জন্য করার জন্য একটি নতুন (টেস্ট) চিত্র দিয়ে এটি পরীক্ষা করি।
### কাজ - ইমেজ ক্লাসিফায়ারকে মূল্যায়ণ
1. এক্ষেত্রে সহজে অনুসরণযোগ্য [মডেল টেস্ট করার গাইড](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/test-your-model?WT.mc_id=academic-17441-jabenn#test-your-model) অনুসরণ করি, নতুন ছবি দিয়ে টেস্ট করতে।
![A unripe banana predicted as unripe with a 98.9% probability, ripe with a 1.1% probability](../../../../images/banana-unripe-quick-test-prediction.png)
1. আমাদের কাছে থাকা সমস্ত ছবিগুলি দিয়ে চেষ্টা করি এবং ফলাফলের নির্ভুল হবার সম্ভাবনা পর্যবেক্ষণ করি।
## ইমেজ ক্লাসিফায়ারকে পুনরায় প্রশিক্ষণ
যখন আমরা আমাদের ক্লাসিফায়ার পরীক্ষা করি, এটি আমাদের প্রত্যাশিত ফলাফল নাও দিতে পারে। ইমেজ ক্লাসিফায়ার মেশিন লার্নিং ব্যবহার করে একটি ছবিতে কি আছে সে সম্পর্কে ভবিষ্যদ্বাণী করে, সম্ভাবনার উপর ভিত্তি করে একটি ইমেজের বিশেষ বৈশিষ্ট্য (একটি নির্দিষ্ট লেবেলের) সাথে মিলিয়ে দেখে। এটি ছবিতে কি আছে তা বোঝে না - এটি একটি কলা কী তা জানে না বা বুঝতে পারেনা যে একটি কলা ও নৌকার মধ্যে কী পার্থক্য। কোন ভুল থাকলে, আমরা আমাদের ক্লাসিফায়ারকে ইমেজ দিয়ে পুনরায় প্রশিক্ষণ দিয়ে আরো উন্নত করতে পারি।
প্রতিবার আমরা quick test ব্যবহার করে রান দিলে, ছবি এবং ফলাফল সংরক্ষণ করা হয়। আমরা আমাদের মডেল পুনরায় প্রশিক্ষণ দিতে এই ছবি ব্যবহার করতে পারি।
### কাজ - ইমেজ ক্লাসিফায়ারকে পুনরায় প্রশিক্ষণ
1. এক্ষেত্রে সহজে অনুসরণযোগ্য গাইড হিসেবে [Predicted ছবি ব্যবহার করে ট্রেনিং প্রদান - এই ডকুমেন্ট ](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/test-your-model?WT.mc_id=academic-17441-jabenn#use-the-predicted-image-for-training) পড়ে, আমাদের মডেলকে পুনরায় প্রশিক্ষণ দিতে পারি, সঠিক ট্যাগ ব্যবহার করে।
1. মডেলকে retrain করা হয়ে গেলে, টেস্ট ইমেজ দিয়ে পরীক্ষা করে দেখি।
---
## 🚀 চ্যালেঞ্জ
যদি আমরা কলার উপর প্রশিক্ষিত একটি মডেলকে একটি স্ট্রবেরি এর ছবি অথবা একজন ব্যক্তি যিনি কলার স্যুট বা কস্টিউম পরে রয়েছেন অথবা একটি হলুদ রঙের কার্টুন চরিত্র যেমন সিম্পসন এর ছবি দিয়ে টেস্ট করতে যাই, তাহলে কোন ধরণের ফলাফল আসতে পারে বলে মনে হয় ?
নিশ্চিত না হলে, আমরা বরং কাজটি আসলেই করে দেখি যে কেমন ফলাফল আসে। ছবি আমরা [Bing Image search](https://www.bing.com/images/trending) থেকেই পেয়ে যাব।
## লেকচার-পরবর্তী কুইজ
[লেকচার-পরবর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/30)
## রিভিউ এবং স্ব-অধ্যয়ন
* যখন ক্লাসিফায়ারকে প্রশিক্ষণ দিচ্ছিলাম, তখন সেখানে আমরা হয়তো *Precision*, *Recall*, and *AP* এর মান দেখেছি যা তৈরি করা মডেলটিকে রেটিং দেয়। এই মানগুলি কী তা সম্পর্কে আরো জানতে আমরা [ক্লাসিফায়ার মূল্যায়ন সংক্রান্ত ডকুমেন্ট](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#evaluate-the-classifier) পড়তে পারি।
* ক্লাসিফায়ারের মান আরো উন্নত করার জন্য [কাস্টম ভিশন মানোন্নয়ন সংক্রান্ত ডকুমেন্ট](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-improving-your-classifier?WT.mc_id=academic-17441-jabenn) পড়তে পারি।
## এসাইনমেন্ট
[বিভিন্ন ফল ও সবজির জন্য ক্লাসিফায়ার তৈরী](assignment.bn.md)

@ -0,0 +1,16 @@
# বিভিন্ন ফল ও সবজির জন্য ক্লাসিফায়ার তৈরী
## নির্দেশাবলী
এই পাঠে আমরা একটি ইমেজ ক্লাসিফায়ারকে পাকা এবং কাঁচা ফলের মধ্যে পার্থক্য করতে প্রশিক্ষণ দিয়েছি, কিন্তু শুধুমাত্র এক ধরনের ফল ব্যবহার করে। ফলের ধরণ এবং পাকা ও কাঁচা এর মধ্যে পার্থক্য অনুসারে সাফল্যের বিভিন্ন হারের সাথে একটি ক্লাসিফায়ারকে একাধিক ফল চিনতে প্রশিক্ষণ দেওয়া যেতে পারে।
উদাহরণস্বরূপ, যেসব ফল পাকলে রঙ পরিবর্তন করে তাদের সাথে, ইমেজ ক্লাসিফায়ারগুলি রঙ সনাক্তকারী সেন্সরের চেয়ে কম কার্যকর হতে পারে কারণ তারা সাধারণত সম্পূর্ণ রঙের পরিবর্তে ধূসর স্কেলের ছবিতে কাজ করে।
আমাদের ক্লাসিফায়ারকে অন্যান্য ফলের সাথে প্রশিক্ষণ দিয়ে দেখা যেতে পারে যে এটি কতটা ভাল কাজ করে, বিশেষ করে যখন ফলগুলি প্রায় একই রকম দেখতে হয়। উদাহরণস্বরূপ, আপেল এবং টমেটো।
## এসাইনমেন্ট মূল্যায়ন মানদন্ড
| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) |
| --------- | ------------------ | -------------- | -------------------- |
|একাধিক খাদ্যপণ্যের জন্য ক্লাসিফায়ারকে প্রশিক্ষণ প্রদান | একাধিক ফলের জন্য ক্লাসিফায়ার প্রশিক্ষণ দিতে সক্ষম | কেবল একধরণের ফলের জন্য ক্লাসিফায়ারকে প্রশিক্ষণ দিতে সক্ষম| ক্লাসিফায়ার প্রশিক্ষণ দিতে ব্যার্থ |
| ক্লাসিফায়ারের সাফল্য নিরূপণ | বিভিন্ন খাদ্যপণ্যের জন্য ক্লাসিফায়ারের সাফল্য নিরূপণ করে তা যথাযথভাবে ব্যখ্যা করতে সক্ষম | পর্যবেক্কখণ এবং মানোন্নয়নের জন্য সুপারিশ প্রদান করতে সক্ষম | ক্লাসিফায়ারের সাফল্য নির্ধারণে ব্যার্থ |

@ -24,7 +24,7 @@ In this lesson we'll cover:
## Camera sensors
Camera sensors, as the name suggests, are cameras that you can connect to your IoT device. They can take still images, or capture streaming video. Some will return raw image data, others will compress the image data into an image file such as a JPEG or PNG. Usually the cameras that work with IoT devices are much smaller and lower resolution that what you might be used to, but you can get high resolution cameras that will rival top end phones. You can get all manner of interchangeable lenses, multiple camera setups, infra-red thermal cameras, or UV cameras.
Camera sensors, as the name suggests, are cameras that you can connect to your IoT device. They can take still images, or capture streaming video. Some will return raw image data, others will compress the image data into an image file such as a JPEG or PNG. Usually the cameras that work with IoT devices are much smaller and lower resolution than what you might be used to, but you can get high resolution cameras that will rival top end phones. You can get all manner of interchangeable lenses, multiple camera setups, infra-red thermal cameras, or UV cameras.
![The light from a scene passes through a lens and is focused on a CMOS sensor](../../../images/cmos-sensor.png)

@ -1,9 +0,0 @@
# Dummy File
This file acts as a placeholder for the `translations` folder. <br>
**Please remove this file after adding the first translation**
For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) .
## THANK YOU
We truly appreciate your efforts!

@ -0,0 +1,175 @@
# IoT ডিভাইস ব্যবহার করে ফল এর মান যাচাই
![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-16.jpg)
> স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya)। বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে।
## লেকচার-পূর্ববর্তী কুইজ
[লেকচার-পূর্ববর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/31)
## সূচনা
পূর্ববর্তী লেসন এ আমরা ইমেজ ক্লাসিফায়ার নিয়ে জানলাম এবং আরো জেনেছি কিভাবে তাদেরকে প্রশিক্ষিত (train) করা যায় ভাল এবং খারাপ ফল সনাক্ত করার জন্য। এই ইমেজ ক্লাসিফায়ার IoT এপ্লিকেশন এ ব্যবহার করতে আমাদেরকে কোনো ধরনের ক্যামেরা দিয়ে ইমেজ ক্যাপচার করতে হবে এবং সেই ইমেজটি ক্লাউড এ পাঠাতে হবে।
এই লেসন এ আমরা ক্যামেরা সেন্সর নিয়ে জানবো এবং কিভাবে এগুলোকে IoT ডিভাইস এর সাথে ব্যবহার করে ইমেজ ক্যাপচার করতে হয় তা শিখবো। এছাড়াও আমরা দেখবো কিভাবে ইমেজ ক্লাসিফায়ারকে IoT ডিভাইস থেকে কল করতে হয়।
এই লেসন এ আমরা কভার করবোঃ
* [ক্যামেরা সেন্সর](#ক্যামেরা-সেন্সর)
* [IoT ডিভাইস ব্যবহার করে ইমেজ ক্যাপচার করা](#IoT-ডিভাইস-ব্যবহার-করে-ইমেজ-ক্যাপচার-করা)
* [আমাদের ইমেজ ক্লাসিফায়ার পাবলিশ করি](#আমাদের-ইমেজ-ক্লাসিফায়ার-পাবলিশ-করি)
* [IoT ডিভাইস থেকে ইমেজ ক্লাসিফাই করা](#IoT-ডিভাইস-থেকে-ইমেজ-ক্লাসিফাই-করা)
* [Model উন্নত করা](#Model-উন্নত-করা)
## ক্যামেরা সেন্সর
ক্যামেরা সেন্সর, তার নামের মতই এমন ক্যামেরা যা IoT ডিভাইস এর সাথে কানেক্ট করা যায়। এগুলো স্থিরচিত্র অথবা স্ট্রিমিং ভিডিও ক্যাপচার করতে পারে, কিছু ডিভাইস গুলো মূল ইমেজ ডাটা ফেরত পাঠাই , বাকি গুলো ইমেজ ডাটা কমপ্রেস করে JPEG অথবা PNG টাইপ এর ইমেজ ফাইল বানাবে। সাধারণত যে কামেরা গুলো IoT ডিভাইস গুলোর সাথে ব্যবহার করা হয় আমরা যেগুলো ব্যবহার করে অভ্যস্ত সেগুলো থেকে অনেক ছোট সাইজ এর এবং কম রেজোলিউশান এর, কিন্তু আমরা হাই রেজোলিউশান এর ক্যামেরা নিতে পারি যেগুলো আধুনিক ফোন গুলার সাথে টেক্কা দেয়। আমরা সব ধরনের ইন্টারচেঞ্জেবল লেন্স, কয়েকটা ক্যামেরা সেটাপ, ইনফ্রারেড থার্মাল ক্যামেরা অথবা ইউভি ক্যামেরা নিতে পারি।
![The light from a scene passes through a lens and is focused on a CMOS sensor](../../../../images/cmos-sensor.png)
বেশিরভাগ ক্যামেরা সেন্সর ইমেজ সেন্সর ব্যবহার করে যেখানে প্রত্যেক পিক্সেল হল ফটোডায়োড। একটা লেন্স ইমেজ সেন্সর এর উপর ইমেজ টাকে ফোকাস করে এবং হাজার অথবা লক্ষ লক্ষ ফটোডায়োড প্রত্যেকে তার উপর আপতিত আলো ডিটেক্ট করে এবং পিক্সেল ডাটা হিসাবে রেকর্ড করে।
> 💁 লেন্স ইমেজ কে উল্টায়, পরে ক্যামেরা সেন্সর আবার ঠিক ভাবে ইমেজটাকে উল্টায়। ঠিক একই রকম আমাদের চোখে হয় - আমরা যা দেখি তা চোখের পিছনে উল্টো ভাবে ডিটেক্ট করে এবুং ব্রেন সেটাকে ঠিক করে।
> 🎓 ইমেজ সেন্সরটা একটিভ-পিক্সেল সেন্সর (APS) হিসেবে পরিচিত, এবং সবচেয়ে জনপ্রিয় টাইপ এর APS হল কমপ্লিমেন্টারি মেটাল-অক্সাইড সেমিকন্ডাক্টর সেন্সর, অথবা CMOS। আমরা শুনে থাকতে পারি ক্যামেরা সেন্সর এ CMOS সেন্সর ব্যবহার এর টার্ম টা।
ক্যামেরা সেন্সর হল ডিজিটাল সেন্সর , ইমেজ ডাটা কে ডিজিটাল ডাটা হিসেবে পাঠায়, সাধারণত যে লাইব্রেরি কমিউনিকেশন প্রদান করে তার সাহায্য নিয়ে, ক্যামেরা গুলো কানেক্ট করে SPI এর মত প্রোটকল ব্যবহার করে যা তাদের বড় পরিমাণে ডাটা পাঠাতে অনুমোদন দেয় - ইমেজ গুলো temperature সেন্সর এর মত সেন্সর থেকে পাওয়া সিংগেল নাম্বার থেকে যথেষ্ট পরিমাণে বড়।
✅ IoT ডিভাইস গুলোর ইমেজ সাইজ এর সীমাবদ্ধতা কি কি? সীমাবদ্ধতাগুলো চিন্তা করি বিশেষ করে মাইক্রোকন্ট্রোলার হার্ডওয়ার এর উপর।
## IoT ডিভাইস ব্যবহার করে ইমেজ ক্যাপচার করা
আমরা আমাদের IoT ডিভাইস ক্যাপচার এবং ইমেজ ক্লাসিফাই করতে ব্যবহার করতে পারি।
### কাজ - IoT ডিভাইস ব্যবহার করে ইমেজ ক্যাপচার করা
নিম্নের কোন একটি প্রাসঙ্গিক গাইড এর মাধ্যমে IoT ডিভাইস ব্যবহার করে ইমেজ ক্যাপচার করিঃ
* [Arduino - Wio Terminal](../wio-terminal-camera.md)
* [Single-board computer - Raspberry Pi](../pi-camera.md)
* [Single-board computer - Virtual device](../virtual-device-camera.md)
## আমাদের ইমেজ ক্লাসিফায়ার পাবলিশ করি
আমরা শেষ লেসন এ ইমেজ ক্লাসিফায়ার ট্রেন করেছিলাম। IoT ডিভাইস এটা ব্যবহার করার আগে, আমাদের model তা পাবলিশ করতে হবে।
### Model Iteration
যখন আমাদের মডেলে শেষ লেসন এ ট্রেনিং হচ্ছিলো, আমরা হয়ত খেয়াল করছিলাম যে **Performance** ট্যাব সাইড এ Iteration গুলো দেখায়। যখন আমরা প্রথম model টা ট্রেন করি তখন আমরা দেখে থাকতে পারি *Iteration 1* ট্রেইনিং এ। যখন আমরা model টাকে প্রেডিকশন ইমেজ ব্যবহার করে আরো উন্নত করি, তখন আমরা দেখে থাকতে পারি *Iteration 2* ট্রেইনিং এ।
প্রতেকবার আমরা যখন model টাকে ট্রেইন করি, আমরা নতুন Iteration পাই। এভাবে আমরা বিভিন্ন ডাটাসেট এর উপর ট্রেইন করা আমাদের model এর বিভিন্ন ভার্সন ট্র্যাক করতে পারি। যখন আমরা **Quick Test** করি, এখানে আমরা Iteration সিলেক্ট করার একটি ড্রপডাউন মেনু পাই, যেন আমরা বিভিন্ন Iteration এর রেজাল্ট তুলনা করতে পারি।
যখন আমরা একটি Iteration নিয়ে সন্তুষ্ট হই, আমরা এটাকে পাবলিশ করতে পারি এক্সটার্নাল এপ্লিকেশন থেকে ব্যবহার সহজলভ্য করার জন্য। এভাবে আমরা আমাদের ডিভাইস দিয়ে ব্যবহার করা একটি পাবলিক ভার্সন পেতে পারি, পরে আরো নতুন কিছু Iteration এর উপর নতুন ভার্সন নিয়ে কাজ করতে পারি, পরে যখন আমরা এটা নিয়ে সন্তুষ্ট হব তখন এটা পাবলিশ করতে পারি।
### কাজ - Iteration পাবলিশ করা
Iteration গুলো কাস্টম ভিসন পোর্টাল থেকে পাবলিশ করতে হয়।
1. [CustomVision.ai](https://customvision.ai) তে কাস্টম ভিসন পোর্টাল লঞ্চ করি এবং সাইন ইন করি যদি ইতিমধ্যে এটা খুলে না থাকি। পরে আমাদের `fruit-quality-detector` প্রোজেক্ট খুলি।
1. উপরের অপশন থেকে **Performance** ট্যাব সিলেক্ট করি।
1. সাইড এর *Iterations* লিস্ট থেকে সর্বশেষ Iteration সিলেক্ট করি।
1. Iteration এর জন্য **Publish** বাটন সিলেক্ট করি।
![The publish button](../../../../images/custom-vision-publish-button.png)
1. *Publish Model* ডায়লগ এ, *Prediction resource* এ আগের লেসন এ আমাদের তৈরি রিসোর্স `fruit-quality-detector-prediction` সেট করি। নাম হিসেবে `Iteration2` রাখি, এবং **Publish** বাটন সিলেক্ট করি।
1. একবার পাবলিশ করা হলে, **Prediction URL** বাটন সিলেক্ট করি। এটা প্রেডিকশন এপিআই এর ডিটেলস দেখাবে, এবং আমাদের IoT ডিভাইস থেকে model কে কল করতে এগুলো দরকার হবে। নিচের সেকশন কে *If you have an image file* হিসেবে লেবেল করা এবং এই ডিটেইল গুলো আমরা চাই। দেখানো URL এর কপি করি যেটা কিছু টা এরকম হবেঃ
```output
https://<location>.api.cognitive.microsoft.com/customvision/v3.0/Prediction/<id>/classify/iterations/Iteration2/image
```
যেখানে `<location>` হবে কাস্টম ভিসন পোর্টাল রিসোর্স তৈরি করার সময় ব্যবহার করা লোকেশন, এবং `<id>` হবে অনেকগুলো লেটার এবং নাম্বার দিয়ে তৈরি করা লম্বা আইডি।
এছাড়াও *Prediction-Key* ভ্যালু এর একটি কপি নিই। এটা একটি সিকিউরড কী (KEY) যেটা model কে কল করার সময় পাস করা হয়। শুধুমাত্র যে আপ্লিকেশন গুলো এই কি পাস করবে তাদেরকে model টা ব্যবহার করতে দেয়া হবে, অন্য সব আপ্লিকেশন কে প্রত্যাখ্যান হবে।
![The prediction API dialog showing the URL and key](../../../../images/custom-vision-prediction-key-endpoint.png)
✅ যখন একটি নতুন Iteration পাবলিশ করা হয়, তখন এটার অন্য নাম থাকে। IoT ডিভাইস এর ব্যবহার করা Iteration আমরা কিভাবে পরিবর্তন করা যায় সেটা আমরা কিভাবে চিন্তা করতে পারি।
## IoT ডিভাইস থেকে ইমেজ ক্লাসিফাই করা
আমরা এখন এই কানেকশন ডিটেইলস গুলো IoT ডিভাইস থেকে ইমেজ ক্লাসিফায়ার কল করার জন্য ব্যবহার করতে পারি।
### কাজ - আমাদের IoT ডিভাইস থেকে ইমেজ ক্লাসিফাই করা
প্রাসঙ্গিক গাইড এর মাধ্যমে কাজ IoT ডিভাইস ব্যবহার করে ইমেজ ক্যাপচার করিঃ
* [Arduino - Wio Terminal](../wio-terminal-classify-image.md)
* [Single-board computer - Raspberry Pi/Virtual IoT device](../single-board-computer-classify-image.md)
## Model উন্নত করা
আমরা যেনে থাকতে পারি যে, IoT ডিভাইস এর সাথে কানেক্টেড থাকা ক্যামেরা থেকে আমরা আশানুরূপ রেজাল্ট নাও পেতে পারি। আমাদের কম্পিউটার থেকে আপলোড করা ইমেজ ব্যবহার করা প্রেডিকশন গুলো সবসময় সঠিক হয় না। এটার কারন হল Model যে ডাটার উপর ট্রেইন করা হয়েছে তার থেকে ভিন্ন ডাটা প্রেডিকশন এর জন্য ব্যবহার করা।
ইমেজ ক্লাসিফায়ার থেকে সবচেয়ে ভাল রেজাল্ট এর জন্য, আমরা প্রেডিকশন এর জন্য ব্যবহার করা ইমেজ এর মত যথাসম্ভব অনুরূপ ইমেজ উপর আমাদের model ট্রেইন করতে চাবো। উদাহরণ স্বরূপ, আমরা যদি ট্রেইনিং এর ইমেজ ক্যাপচার এর জন্য ফোন ক্যামেরা ব্যবহার করি, সেটার ইমেজ কোয়ালিটি, শার্পনেস, এবং কালার একট IoT ডিভাইস এর সাথে কানেক্টেড ক্যামেরা থেকে ভিন্ন হবে।
![2 banana pictures, a low resolution one with poor lighting from an IoT device, and a high resolution one with good lighting from a phone](../../../../images/banana-picture-compare.png)
উপরের ইমেজ এ, বামের কলার ছবি একটি রাস্পবেরি পাই ক্যামেরা থেকে নেয়া হয়েছিল, ডানের টা একই কলার ছবি আইফোন ক্যামেরা থেকে নেয়া হয়েছিল। এখানের কোয়ালিটির দিক থেকে লক্ষণীয় ভিন্নতা আছে - আইফোন এর ছবি টা শার্পার, উজ্জ্বল কালার সহ এবং বেশি কন্ট্রাস্ট এর।
✅ আমাদের IoT ডিভাইস দিয়ে ক্যাপচার করা ইমেজ এর ভুল প্রেডিকশন এর জন্য আর কি কি কারন থাকতে পারে? একটা IoT ডিভাইস যে পরিবেশে ব্যবহার করা হতে পারে সেটা নিয়ে চিন্তা করি, কি কি ফ্যাক্টর ক্যাপচার করা ইমেজ কে প্রভাবিত করতে পারে।
মডেল কে উন্নত করার জন্য, আমরা IoT ডিভাইস থেকে ক্যাপচার করা ইমেজ দিয়ে রিট্রেইন করতে পারি।
---
### কাজ - মডেল উন্নত করা
1. আমাদের IoT ডিভাইস দিয়ে পাকা এবং কাঁচা ফলের কিছু ইমেজ ক্লাসিফাই করি।
1. কাস্টম ভিসন পোর্টাল এ, *Predictions* ট্যাব এর ইমেজ ব্যবহার করে রিট্রেইন করি।
> ⚠️আমরা [এই সিরিজের ১ম লেসন থেকে ক্লাসিফায়ার retain করার জন্য প্রয়োজনীয় নির্দেশনা](../1-train-fruit-detector/README.md#retrain-your-image-classifier) দেখতে পারি, যদি প্রয়োজন হয়।
1. যদি আমাদের ইমেজ ট্রেইনিং এ ব্যবহার করা আসল ইমেজ থেকে দেখতে অনেক ভিন্ন হয়, আমরা আসল ইমেজ গুলো *Training Images* ট্যাব সিলেক্ট করে এবং **Delete** বাটন সিলেক্ট করে ডিলিট করতে পারি। ইমেজ সিলেক্ট করার জন্য, আমাদের কার্সর তা এর উপর মুভ করি এবং একটি টিক আসবে, টিক টা সিলেক্ট অথবা ডিসিলেক্ট করি ইমেজ সিলেক্ট অথবা ডিসিলেক্ট করার জন্য।
1. একটি নতুন Iteration ট্রেইন করি এবং উপরের ধাপ ব্যবহার করে পাবলিশ করি।
1. আমাদের কোড এর endpoint URL আপডেট করি, এবং অ্যাপ তা পুনরায় রান করি।
1. প্রেডিকশন এর রেসাল্ট নিয়ে সন্তুষ্ট না হওয়া পর্যন্ত এই ধাপ গুলো Iteration করি।
---
## 🚀 চ্যালেঞ্জ
ইমেজ এর রেজোলিউশন অথবা আলোর উপস্থিতি এখানে প্রেডিকশন কে কতটুকু প্রভাবিত করে?
আমাদের ডিভাইস এর কোড এ ইমেজ এর রেজোলিউশন পরিবর্তন করার চেষ্টা করি এবং দেখি এটা ইমেজ এর কোয়ালিটি তে কোন পার্থক্য আনে কিনা। এছাড়াও আলো চেঞ্জ করেও চেষ্টা করে দেখতে পারি।
যদি আমরা এই প্রোডাকশন ডিভাইসটি কোন ফার্ম অথবা ফ্যাক্টরি তে বিক্রয়ের জন্য তৈরী করি, আমরা কিভাবে নিশ্চিত করতে পারি যে এটা সব সময় ধারাবাহিকভাবে ভালো ফলাফল দিবে?
## লেকচার-পরবর্তী কুইজ
[লেকচার-পরবর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/32)
## রিভিউ ও স্ব-অধ্যয়ন
আমরা আমাদের কাস্টম ভিসন মডেল পোর্টাল ব্যবহার করে ট্রেইন করেছি। এটা ইমেজ এর সহজলভ্যতার উপর নির্ভর করে - এবং বাস্তব জগতে আমরা আমাদের ক্যামেরা ডিভাইস এর সাথে মিলে এমন ট্রেইনিং ডাটা হয়ত পাবো না। আমরা এটার বদলে আমাদের ডিভাইস থেকে সরাসরি ট্রেইনিং করতে পারি করতে এপিআই ব্যবহার করে, IoT ডিভাইস থেকে ক্যাপচার করা ইমেজ দিয়ে মডেল ট্রেইন করার জন্য।
* ট্রেইনিং এপিআই সম্পর্কে আরো জানতে [using the Custom Vision SDK quick start](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/image-classification?WT.mc_id=academic-17441-jabenn&tabs=visual-studio&pivots=programming-language-python) দেখতে পারি।
## এসাইনমেন্ট
[ক্লাসিফিকেশন রেজাল্টের প্রতিক্রিয়া জানানো](assignment.bn.md)

@ -0,0 +1,13 @@
# ক্লাসিফিকেশন রেজাল্টের প্রতিক্রিয়া জানানো
## নির্দেশাবলী
আমাদের ডিভাইস ইমেজ ক্লাসিফাই করেছে, এবং প্রেডিকশনের মান গুলো আছে। আমাদের ডিভাইস এই তথ্য গুলো দিয়ে কিছু করতে পারে - এটা প্রসেসিং এর জন্য IoT Hub এ পাঠাতে পারে অন্য সিস্টেম গুলো দিয়ে, অথবা এটা একটা actuator কন্ট্রোল করতে পারে যেমন LED আলোকিত হবে যখন ফল কাঁচা।
আমাদের ডিভাইস এ আমাদের মত করে প্রতিক্রিয়া জানাতে পারে এমন ভাবে কোড করি - হয় IoT Hub এ ডাটা পাঠাবে , actuator কন্ট্রোল করবে, অথবা দুটো কে একত্রিত করবে এবং IoT Hub এ ডাটা পাঠাবে কিছু সার্ভারলেস কোড দিয়ে যেটা নির্ধারণ করবে ফল টা পাকা নাকি না এবং actuator কন্ট্রোল করার একটি কমান্ড ফেরত পাঠাবে।
## এসাইনমেন্ট মূল্যায়ন মানদন্ড
| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) |
| --------- | ------------------ | -------------- | -------------------- |
| প্রেডিকশনের প্রতিক্রিয়া জানানো | প্রেডিকশনের প্রতিক্রিয়া বাস্তবায়ন করতে পেরেছে যেটা একই মানের প্রেডিকশনের সাথে ধারাবাহিকভাবে ভাবে কাজ করতে পারে | প্রেডিকশনের উপর নির্ভরশীল না এমন প্রতিক্রিয়া বাস্তবায়ন করতে পেরেছে, যেমন IoT Hub এ মূল ডাটা প্রেরণ করতে পারে| ডিভাইস টাকে প্রেডিকশনের প্রতিক্রিয়া দেখানোর প্রোগ্রাম করতে পারে নাই |

@ -71,7 +71,7 @@ There are downsides to edge computing, where the cloud may be a preferred option
1. **Scale and flexibility** - cloud computing can adjust to network and data needs in real-time by adding or reducing servers and other resources. To add more edge computers requires manually adding more devices.
1. **Reliability and resiliency** - cloud computing provides multiple servers often in multiple locations for redundancy and disaster recovery. To have the same level of redundancy on the edge requires large investments and a lor of configuration work.
1. **Reliability and resiliency** - cloud computing provides multiple servers often in multiple locations for redundancy and disaster recovery. To have the same level of redundancy on the edge requires large investments and a lot of configuration work.
1. **Maintenance** - cloud service providers provide system maintenance and updates.

@ -1,9 +0,0 @@
# Dummy File
This file acts as a placeholder for the `translations` folder. <br>
**Please remove this file after adding the first translation**
For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) .
## THANK YOU
We truly appreciate your efforts!

@ -0,0 +1,615 @@
# Edge এ Fruit Detector পরিচালনা করা
![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-17.jpg)
> স্কেচনোটটি তৈরী করেছি [Nitya Narasimhan](https://github.com/nitya)। বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে।
এই ভিডিওটি আইওটি ডিভাইসে চলমান ইমেজ ক্লাসিফায়ারগুলির একটি সংক্ষিপ্ত বিবরণ দেয়, যে বিষয়টি এই পাঠেই অন্তর্ভুক্ত।
[![Custom Vision AI on Azure IoT Edge](https://img.youtube.com/vi/_K5fqGLO8us/0.jpg)](https://www.youtube.com/watch?v=_K5fqGLO8us)
> 🎥 উপরের ছবিতে ক্লিক করে ভিডিওটি দেখে নিই
## লেকচার-পূর্ববর্তী কুইজ
[লেকচার-পূর্ববর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/33)
## সূচনা
গত পাঠে আমরা পাকা এবং কাঁচা ফলের শ্রেণিবিন্যাস করতে ইমেজ ক্লাসিফায়ার ব্যবহার করেছি, ইন্টারনেটে আমাদের আইওটি ডিভাইসে ক্যামেরা দ্বারা ধারণ করা একটি ছবি ক্লাউড সার্ভিসে পাঠিয়েছি। এই কাজগুলি হতে সময় নেয়, অর্থ ব্যয় হয় এবং আমরা যে ধরণের ছবি ব্যবহার করছি, তার উপর নির্ভর করে গোপনীয়তা সুংক্রান্ত বিষয়ের প্রভাব থাকতে পারে।
এই পাঠে আমরা শিখবো কিভাবে মেশিন লার্নিং (এমএল) মডেলগুলি Edge এ চালানো যায় - ক্লাউডের পরিবর্তে আমাদের নিজের নেটওয়ার্কে চলমান আইওটি ডিভাইসে। আমরা ক্লাউড কম্পিউটিং বনাম Edge কম্পিউটিং এর সুবিধা এবং অসুবিধা সম্বন্ধে জানবো, কিভাবে আমাদের AI মডেলকে Edge এ স্থাপন করবো এবং কিভাবে আমাদের IoT ডিভাইস থেকে এটি অ্যাক্সেস করবো সেটিও দেখবো।
এই পাঠে আমরা শিখবো :
* [Edge computing](#edge-computing)
* [Azure IoT Edge](#Azure-IoT-Edge)
* [IoT Edge device রেজিস্টার করা](#IoT-Edge-device-রেজিস্টার-করা)
* [IoT Edge device সেটাপ করা](#IoT-Edge-device-সেটাপ-করা)
* [মডেল এক্সপোর্ট করা](#মডেল-এক্সপোর্ট-করা)
* [ডেপ্লয়মেন্টের জন্য কন্টেইনার প্রস্তুতকরণ](#ডেপ্লয়মেন্টের-জন্য-কন্টেইনার-প্রস্তুতকরণ)
* [কন্টেইনার ডেপ্লয় করা](#কন্টেইনার-ডেপ্লয়-করা)
* [আমাদের IoT Edge device ব্যবহার করা](#আমাদের-IoT-Edge-device-ব্যবহার-করা)
## Edge computing
Edge কম্পিউটিংয়ের ধারণা টি এমন যে যেখানে ডেটা তৈরী বা যেখান থেকেই গৃহীত হয়, সেখানকার কাছাকাছি ডেটা প্রসেস করতে পারা। ক্লাউডে এই প্রসেসিং এর পরিবর্তে, এটি ক্লাউডের Edge এ স্থানান্তরিত হয় - যেটি কিনা আমাদের অভ্যন্তরীণ নেটওয়ার্ক।
![An architecture diagram showing internet services in the cloud and IoT devices on a local network](../../../../images/cloud-without-edge.png)
এ পর্যন্ত পাঠগুলিতে আমরা শিখেছি কীভাবে আমাদের কাছের ডিভাইসগুলি তথ্য সংগ্রহ এবং ক্লাউডে ডেটা পাঠানোর জন্য বিশ্লেষণ করে, ক্লাউডে সার্ভারহীন ফাংশন বা এআই মডেল কীভাবে চালানো হয়।
![An architecture diagram showing IoT devices on a local network connecting to edge devices, and those edge devices connect to the cloud](../../../../images/cloud-with-edge.png)
Edge কম্পিউটিং এ মূলত কিছু ক্লাউড পরিষেবা বা সার্ভিসকে ক্লাউড থেকে সরিয়ে এবং IoT ডিভাইস যে নেটওয়ার্কে চলমান সেই একই নেটওয়ার্কের কোন কম্পিউটারে নিয়ে আসা। শুধুমাত্র প্রয়োজন হলেই ক্লাউডের সাথে যোগাযোগ করা হবে। উদাহরণস্বরূপ, আমরা কোন ফল পাকা কিনা তা বিশ্লেষণ করতে Edge এর ডিভাইসে এআই মডেল চালাতে পারি এবং শুধুমাত্র বিশ্লেষণগুলি ক্লাউডে ফেরত পাঠাতে পারি, যেমন ফলের পাকা বনাম কাঁচা ফলের সংখ্যা।
✅ আমরা এতদিন পর্যন্ত শেখা আইওটি অ্যাপ্লিকেশনগুলি সম্পর্কে চিন্তা করি। তাদের কোন অংশগুলি Edge এ নিয়ে আসা যেতে পারে।
### সুবিধা
Edge কম্পিউটিং এর সুবিধা গুলো হলো:
1. **দ্রততা** - সময়-সংবেদনশীল (time-sensitive) তথ্যের জন্য খুবই সুবিধাজনক কারণ সমগ্র ইন্টারনেট জুড়ে সংযোগ করার পরিবর্তে লোকাল ডিভাইসেই কাজগুলি করা হয়। এটি উচ্চ গতিতে তা করতে সক্ষম হয় কারণ অভ্যন্তরীণ নেটওয়ার্কগুলি ইন্টারনেট সংযোগের তুলনায় যথেষ্ট দ্রুত গতিতে চলতে পারে, যার ডেটা অনেক কম দূরত্বে ভ্রমণ করে।
> 💁 ইন্টারনেট সংযোগের জন্য অপটিক্যাল ক্যাবল ব্যবহার করা হলেও , আলোর গতিতে ডেটা পরিবহণের সুযোগ দেয়া হলেও, ডেটা ক্লাউড প্রোভাইডারদের কাছে পৌছতে সময় নিতে পারে। উদাহরণস্বরূপ, যদি আমরা ইউরোপ থেকে মার্কিন যুক্তরাষ্ট্রে ক্লাউড পরিষেবাদিতে ডেটা পাঠাই তবে অপটিক্যাল ক্যাবলে আটলান্টিক অতিক্রম করতে ডেটার জন্য কমপক্ষে 28ms সময় লাগে (এখানে তাও উপেক্ষা করা হচ্ছে - ট্রান্সঅ্যাটলান্টিক কেবলে ডেটা পাওয়া, বৈদ্যুতিক থেকে আলোকীয় সংকেতে রূপান্তর এবং তারপর আবার অপটিক্যাল ক্যাবল থেকে ক্লাউড প্রোভাইডারের কাছে পৌছানোর মত বিষয়গুলো)।
Edge কম্পিউটিংয়ের জন্য কম নেটওয়ার্ক ট্র্যাফিকের প্রয়োজন হয়, এতে করে ইন্টারনেট সংযোগের সীমিত ব্যান্ডউইথের সমস্যা বা এর মধ্যে যানজটের ফলে আমাদের ডেটা পরিবহন ধীর হওয়ার ঝুঁকি হ্রাস করে।
1. **দূরবর্তী সংযোগ নিয়ন্ত্রণ** - Edge কম্পিউটিং কাজ করে যখন আমাদের কোন ইন্টারনেট সংযোগ থাকেনা বা খুবই সীমিত পর্যায়ের হয়। উদাহরণস্বরূপ যখন পরিবেশগত দূর্যোগ ঘটে, তখন ইন্টারনেটের কোন একসেস থাকেনা।
1. **অল্প খরচ** - Edge ডিভাইসে ডেটা সংগ্রহ, সঞ্চয়, বিশ্লেষণ এবং ট্রিগারিং কার্যক্রম সম্পাদন করা ক্লাউড পরিষেবার ব্যবহার হ্রাস করে যা আমাদের আইওটি অ্যাপ্লিকেশনের সামগ্রিক খরচ কমাতে পারে। Edge কম্পিউটিংয়ের জন্য ডিজাইন করা ডিভাইসে সাম্প্রতিক অনেক উন্নয়ন হয়েছে, সম্প্রতি এআই এক্সিলারেটর বোর্ড যেমন [NVIDIA জেটসন ন্যানো](https://developer.nvidia.com/embedded/jetson-nano-developer-kit) এর আবির্ভাব ঘটেছে, যা GPU-ভিত্তিক হার্ডওয়্যার ব্যবহার করে AI ওয়ার্কলোডগুলি চালাতে পারে যে ডিভাইসগুলির দাম US $100 এরও কম।
1. **গোপনীয়তা এবং নিরাপত্তা** - Edge কম্পিউটিং এর ক্ষেত্রে ডেটা আমাদের নেটওয়ার্কে থাকে এবং ক্লাউডে আপলোড করা হয় না। এটি প্রায়শই সংবেদনশীল এবং ব্যক্তিগতভাবে শনাক্তযোগ্য তথ্যের জন্য অধিকতর কল্যাণজনক। এছাড়াও ডেটা বিশ্লেষণ করার পরে ডেটা সংরক্ষণ করার প্রয়োজন হয় না, যা ডেটা ফাঁসের ঝুঁকি অনেক কমিয়ে দেয়। উদাহরণগুলির মধ্যে রয়েছে মেডিকেল ডেটা এবং সিসিটিভি ক্যামেরা ফুটেজ।
1. **অনিরাপদ ডিভাইসগুলি পরিচালনা করা** - যদি আমাদের জানামতে নিরাপত্তা ত্রুটিযুক্ত কোন ডিভাইস থাকে যা আমরা সরাসরি আমাদের নেটওয়ার্ক বা ইন্টারনেটের সাথে সংযুক্ত করতে চাই না, সেগুলিকে একটি পৃথক নেটওয়ার্কে গেটওয়ে আইওটি Edge ডিভাইসে সংযুক্ত করতে পারি। এই Edge ডিভাইসটি আমাদের বৃহত্তর নেটওয়ার্ক বা ইন্টারনেটের সাথেও সংযোগ স্থাপন করতে পারে এবং ডেটা প্রবাহকে সামনে পেছনে পরিচালনা করতে পারে।
1. **অসামঞ্জস্যপূর্ণ ডিভাইসের জন্য সাপোর্ট** - যদি আমাদের এমন ডিভাইস থাকে যা IoT হাবের সাথে সংযোগ করতে পারে না, উদাহরণস্বরূপ এমন ডিভাইস যা শুধুমাত্র HTTP সংযোগ ব্যবহার করে সংযোগ করতে পারে বা যে ডিভাইসগুলিতে কেবলমাত্র ব্লুটুথ সংযোগ আছে- সেক্ষেত্রে আমরা একটি IoT Edge ডিভাইসকে গেটওয়ে ডিভাইস হিসাবে ব্যবহার করতে পারি , IoT Hub- এ বার্তা পাঠানোর জন্য।
✅ কিছু গবেষণা করি: Edge কম্পিউটিং এর অন্য কোন কোন সুবিধা থাকতে পারে?
### অসুবিধা
Edge কম্পিউটিংয়ের আবার কিছু অসুবিধাও রয়েছে, যেসব ক্ষেত্রে ক্লাউড ভালো অপশন হতে পারে:
1. **স্কেল এবং ফ্লেক্সিবিলিটি** - ক্লাউড কম্পিউটিং এ সার্ভার এবং অন্যান্য রিসোর্স সংযোজন বা হ্রাস করে রিয়েল -টাইমে নেটওয়ার্ক এবং ডেটা প্রয়োজনের সাথে সামঞ্জস্য করতে পারে। কিন্তু Edge এর সুবিধা কম্পিউটারে যোগ করার জন্য ম্যানুয়ালি আরো ডিভাইস যোগ করা প্রয়োজন।
1. **নির্ভরযোগ্যতা এবং সহনশীলতা** - ক্লাউড কম্পিউটিং এ অপ্রয়োজনীয় অতিরিক্ত রিসোর্স এবং দুর্যোগকালীন পরিস্থিতি এড়ানোর জন্য প্রায়ই একাধিক স্থানে একাধিক সার্ভার সরবরাহ করে। Edge এ একই মাত্রার অপ্রয়োজনীয়তার জন্য বড় বিনিয়োগ এবং কনফিগারেশনের কাজ প্রয়োজন।
1. **রক্ষণাবেক্ষণ** - ক্লাউড পরিষেবা প্রদানকারীরারাই সিস্টেম রক্ষণাবেক্ষণ এবং আপডেট প্রদান করে।
✅ কিছু গবেষণা করি: Edge কম্পিউটিংয়ে অন্য কোন অসুবিধা থাকতে পারে?
ক্লাউড ব্যবহার করার অসুবিধার মধ্যে দেখা যায় - আমরা ক্লাউড সরবরাহকারীদের দক্ষতা এবং স্কেলের উপর নির্ভর করতে পারবোনা, বরং আমাদেরকে এই ডিভাইসগুলি নিজেই তৈরি এবং পরিচালনা করতে হবে।
Edge কম্পিউটিংয়ের দ্বারা কিছু ঝুঁকি প্রশমিত করা যায়। উদাহরণস্বরূপ, যদি আমাদের যন্ত্রপাতি সহ কারখানায় যেখান থেকে ডেটা সংগ্রহ করা হয়, সেখানেই একটি Edge ডিভাইস থাকে, তাহলে আমাদেরকে দুর্যোগ পরিস্থিতি সম্পর্কে ভাবতে হবে না। যদি কারখানার বিদ্যুৎ চলে যায় তাহলে আমাদের ব্যাকআপ Edge ডিভাইসের প্রয়োজন হবে না কারণ মেশিনগুলি ডেটা তৈরির পর, Edge ডিভাইসের প্রক্রিয়াগুলিও বিদ্যুৎবিহীন পরিচালনা করা যাবে।
IoT সিস্টেমের জন্য, আমরা প্রায়ই ক্লাউড এবং Edge কম্পিউটিং এর মিশ্রণ এর কৌশল গ্রহণ করি যেখানে সিস্টেম এর গ্রাহকদের এবং এর রক্ষণাবেক্ষণকারীদের প্রয়োজনের উপর ভিত্তি করে প্রতিটি সেবার সুবিধা পাওয়া যায়।
## Azure IoT Edge
![The Azure IoT Edge logo](../../../../images/azure-iot-edge-logo.png)
Azure IoT Edge হল একটি পরিষেবা যা আমাদেরকে কাজের চাপকে ক্লাউডের বাইরে এবং Edge এ সরিয়ে নিতে সাহায্য করতে পারে। আমরা একটি Edge ডিভাইস হিসাবে একটি ডিভাইস সেট আপ, এবং ক্লাউড থেকে আমরা যে Edge ডিভাইসে কোড স্থাপন করতে পারি। এটি আমাদেরকে ক্লাউড এবং Edge এর ক্ষমতাগুলির সর্বোচ্চ ব্যবহার নিশ্চিত করে।
> 🎓 *Workloads* বলতে সেসকল সার্ভিস বোঝায় যেগুলো কোন ধরনের কাজ করে, যেমন এআই মডেল, অ্যাপ্লিকেশন বা সার্ভারলেস ফাংশন।
উদাহরণস্বরূপ, আমরা ক্লাউডে একটি ইমেজ ক্লাসিফায়ার প্রশিক্ষণ দিতে পারি, তারপর ক্লাউড থেকে এটি একটি Edge ডিভাইসে স্থাপন করি। আমাদের আইওটি ডিভাইস তারপর ইন্টারনেটে ছবি পাঠানোর পরিবর্তে Edge ডিভাইসে ইমেজ পাঠায় শ্রেণীবিন্যাসের জন্য। যদি আমাদের মডেলের পরিবর্তন বা উন্নয়ন প্রয়োজন হয়, তাহলে আমরা এটিকে ক্লাউডে প্রশিক্ষণ দিতে পারি এবং আইওটি Edge ব্যবহার করে Edge ডিভাইসে মডেলটিকে আমরা আপডেট করতে পারি।
> 🎓 IoT Edge- এ যে সফটওয়্যারটি মোতায়েন করা হয় তা *মডিউল* নামে পরিচিত। ডিফল্টরূপে IoT Edge মডিউল চালায় যা IoT Hub- এর সাথে যোগাযোগ করে, যেমন `edgeAgent` এবং` edgeHub` মডিউল। যখন আমরা একটি ইমেজ ক্লাসিফায়ার স্থাপন করি, এটি একটি অতিরিক্ত মডিউল হিসাবে স্থাপন করা হয়।
আইওটি Edge আইওটি হাবের মধ্যেই তৈরি করা হয়েছে, তাই আমরা একই স্তরের সুরক্ষা সহ আইওটি ডিভাইসগুলি পরিচালনা করতে যে পরিষেবাটি ব্যবহার করি, সেই একই সার্ভিস দিয়ে আমরা Edge ডিভাইসগুলি পরিচালনা করতে পারি।
আইওটি Edge *কনটেইনার* থেকে কোড চালায় - এটি স্বয়ংসম্পূর্ণ অ্যাপ্লিকেশন যা আমাদের কম্পিউটারে বাকি অ্যাপ্লিকেশন থেকে বিচ্ছিন্নভাবে চালানো হয়। যখন আমরা একটি কন্টেইনার চালাই তখন এটি আমাদের কম্পিউটারের ভিতরে একটি পৃথক কম্পিউটারের মতো কাজ করে, যার নিজস্ব সফ্টওয়্যার, পরিষেবা এবং অ্যাপ্লিকেশনগুলি চলছে। বেশিরভাগ সময় কনটেইনার আমাদের কম্পিউটারে কিছু অ্যাক্সেস করতে পারে না যতক্ষণ না আমরা কন্টেইনারের সাথে একটি ফোল্ডারের মতো জিনিস ভাগ করা বেছে নেই। কন্টেইনার তারপর একটি খোলা পোর্টের মাধ্যমে সার্ভিসগুলি প্রকাশ করে যা আমরা আমাদের নেটওয়ার্কে সংযোগ করতে বা প্রকাশ করতে পারি।
![A web request redirected to a container](../../../../images/container-web-browser.png)
উদাহরণস্বরূপ, আমরা পোর্ট 80, ডিফল্ট HTTP পোর্টে চলমান একটি ওয়েব সাইটকে একটি কন্টেইনার রাখতে পারি এবং আমরা এটি আমাদের কম্পিউটার থেকে পোর্ট 80 তেও প্রকাশ করতে পারি।
✅ কিছু গবেষণা করি: Docker বা Moby এর মতো সার্ভিস এবং কন্টেইনার সম্পর্কে আরো পড়ি।
আমরা ইমেজ ক্লাসিফায়ার ডাউনলোড করার জন্য কাস্টম ভিশন ব্যবহার করতে পারি এবং সেগুলোকে কনটেইনার হিসেবে স্থাপন করতে পারি, হয় সরাসরি কোনো ডিভাইসে চালানো অথবা আইওটি Edge এর মাধ্যমে মোতায়েন করা যেতে পারে। একবার একটা কন্টেইনার চলতে থাকলে, ক্লাউড সংস্করণের মতো একই REST API ব্যবহার করে এটি একসেস করা যেতে পারে, তবে endpoint টি কন্টেইনার চালানোর জন্য Edge ডিভাইসের দিকে নির্দেশ করে।
## IoT Edge device রেজিস্টার করা
একটি আইওটি Edge ডিভাইস ব্যবহার করার জন্য, এটি আইওটি হাব -এ রেজিস্ট্রেশন হওয়া প্রয়োজন।
### Task - IoT Edge device রেজিস্টার করা
1. `fruit-quality-detector` রিসোর্স গ্রুপে আইওটি হাব তৈরী করি। এটাকে ইউনিক একটা নাম দেয়া যেতে পারে, যেমনঃ `fruit-quality-detector`
1. একটি IoT Edge device রেজিস্ট্রেশন করি, নাম দিই `fruit-quality-detector-edge`। এটি করার কমান্ডটি একটি non-edge ডিভাইস নিবন্ধনের জন্য ব্যবহৃত কমান্ডের অনুরূপ, তবে `--edge-enabled` ফ্ল্যাগটি পাস করা যাবেনা।
```sh
az iot hub device-identity create --edge-enabled \
--device-id fruit-quality-detector-edge \
--hub-name <hub_name>
```
`<hub_name>` এর স্থলে আমাদের আইওটি হাবের নাম বসাই।
1. নিম্নলিখিত কমান্ড ব্যবহার করে আমাদের ডিভাইসের জন্য সংযোগ স্ট্রিং নিই:
```sh
az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \
--output table \
--hub-name <hub_name>
```
`<hub_name>` এর স্থলে আমাদের আইওটি হাবের নাম বসাই।
আউটপুটে দেখানো কানেকশন স্ট্রিং এর কপি রাখি।
## IoT Edge device সেটাপ করা
একবার IoT হাব এ এজ ডিভাইস রেজিস্ট্রেশন তৈরি করে নিলে, আমরা এজ ডিভাইস সেট আপ করতে পারবো।
### Task - Install and start the IoT Edge Runtime
**IoT Edge runtime কেবল Linux container এ রান করে।** এটি লিনাক্সে চলবে অথবা লিনাক্স ভার্চুয়াল মেশিন ব্যবহার করে উইন্ডোজে চালানো যাবে।
* আমরা যদি আমাদের আইওটি ডিভাইস হিসাবে রাস্পবেরি পাই ব্যবহার করি, তাহলে এটি লিনাক্সের একটি সাপোর্টেড সংস্করণ চালায় এবং আইওটি Edge রানটাইম হোস্ট করতে পারে। এক্ষেত্রে আমরা [Microsoft docs এর লিনাক্স গাইডের জন্য Azure আইওটি Edge ইনস্টলেশন](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn) পড়ে দেখতে পারি।
> 💁 মনে রাখতে হবে, রাস্পবেরি পাই ওএস ডেবিয়ান লিনাক্সের একটি রূপ।
* আমরা যদি রাস্পবেরি পাই ব্যবহার না করি, কিন্তু একটি লিনাক্স কম্পিউটার থাকে, তাহলে আমরা IoT Edge রানটাইম চালাতে পারবো। এক্ষেত্রে আমরা [লিনাক্স গাইডের জন্য Azure আইওটি এজ ইনস্টলেশন](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn) পড়ে দেখতে পারি।
* উইন্ডোজে আমরা IoT Edge runtime ইন্সটল করতে পারি Linux Virtual Machine ব্যবহার করে, যার জন্য [উইন্ডোজে IoT Edge runtime পরিচালনা ](https://docs.microsoft.com/azure/iot-edge/quickstart?WT.mc_id=academic-17441-jabenn#install-and-start-the-iot-edge-runtime) পড়তে পারি। *Deploy a module* সেকশনে যাওয়ার পর কাজ বন্ধ করতে হবে।
* macOS ব্যবহারকারী হল্র ক্লাউডে virtual machine (VM) তৈরী করতে পারি। IoT Edge িন্সটল করা লিনাক্স ভিএম আমরা ডেপ্লয় করতে পারি। এজন্য [IoT Edge এর জন্য ভার্চুয়াল মেশিন](vm-iotedge.md) পড়ে দেখতে পারি।
## মডেল এক্সপোর্ট করা
Edge এ ক্লাসিফায়ার চালানোর জন্য, এটি কাস্টম ভিশন থেকে এক্সপোর্ট করতে হবে। কাস্টম ভিশন দুই ধরণের মডেল তৈরি করতে পারে - স্ট্যান্ডার্ড মডেল এবং কমপ্যাক্ট মডেল। কম্প্যাক্ট মডেলগুলি মডেলের আকার কমাতে বিভিন্ন কৌশল ব্যবহার করে, এটি আইওটি ডিভাইসে ডাউনলোড এবং মোতায়েনের জন্য যথেষ্ট ছোট করে তোলে।
যখন আমরা ইমেজ ক্লাসিফায়ার তৈরি করি, তখন আমরা *Food* ডোমেইন ব্যবহার করেছিলাম, মডেলটির একটি সংস্করণ যা Food ইমেজগুলিতে প্রশিক্ষণের জন্য অপ্টিমাইজ করা হয়েছে। কাস্টম ভিশনে, আমরা আমাদের প্রকল্পের ডোমেইন পরিবর্তন করতে, আমাদের প্রশিক্ষণ তথ্য ব্যবহার করে নতুন ডোমেনের সাথে একটি নতুন মডেলকে প্রশিক্ষণ দিতে হবে। কাস্টম ভিশন দ্বারা সমর্থিত সমস্ত ডোমেইন স্ট্যান্ডার্ড এবং কমপ্যাক্ট হিসাবে পাওয়া যায়।
### কাজ - মডেলটিকে Food (compact) domain এ ট্রেইনিং প্রদান
1. Custom Vision portal এ যাওয়ার জন্য [CustomVision.ai](https://customvision.ai) তে ক্লিক করি এবং সাইন ইন করে নিই যদি আগে থেকে সাইন ইন করা না থাকে। এখন `fruit-quality-detector` প্রজেক্টটি চালু করি।
1. এখন **Settings** সিলেক্ট করি (এই ⚙ চিহ্ন)
1. *Domains* লিস্ট থেকে, নির্বাচন করি *Food (compact)*
1. তারপর *Export Capabilities* থেকে *Basic platforms (Tensorflow, CoreML, ONNX, ...)* সিলেক্ট করি।
1. Settings পেইজের একদম নীচে থাকা **Save Changes** এ সিলেক্ট করি।
1. এখন **Train** এ ক্লিক করে, *Quick training* অপশনটি নির্বাচন করে মডেলকে ট্রেইন করি।
### Task - মডেল এক্সপোর্ট করা
মডেলটি একবার ট্রেইন হয়ে গেলে কন্টেইনার সহ এক্সপোর্ট করতে হবে।
1. **Performance** ট্যাবে গিয়ে কম্প্যাক্ট ডোমেইনের গত ইটারেশন টি তে যাই।
1. সেখানে উপরের দিকে **Export** বাটনে ক্লিক করি।
1. **DockerFile** সিলেক্ট করি, তারপর আমাদের Edge ডিভাইসের সাথে মিলে এমন একটি ভার্সন নির্বাচন করি:
* Linux computer, Windows computer বা Virtual Machine এ IoT Edge ব্যবহার করলে, *Linux* ভার্সনটি সিলেক্ট করি।
* Raspberry Pi এ IoT Edge ব্যবহার করলে , *ARM (Raspberry Pi 3)* ভার্সনটি সিলেক্ট করি।
> 🎓 Docker হলো কনটেইনার পরিচালনার জন্য সবচেয়ে জনপ্রিয় ট্যুলগুলির মধ্যে একটি এবং ডকার ফাইল হল কন্টেইনার সেট আপ করার জন্য নির্দেশাবলীর একটি সেট।
1. এবার **Export** এ ক্লিক করলে Custom Vision এর প্রয়োজনীয় ফাইলগুলি তৈরী হয়ে যাবে। তারপর **Download** এ ক্লিক করে জিপ ফাইল আকারে এগুলো ডাউনলোড করি।
1. কম্পিউটারে সেভ করার পর ফোল্ডারটি unzip করি।
## ডেপ্লয়মেন্টের জন্য কন্টেইনার প্রস্তুতকরণ
![Containers are built then pushed to a container registry, then deployed from the container registry to an edge device using IoT Edge](../../../../images/container-edge-flow.png)
একবার মডেলটি ডাউনলোড করার পরে, এটি একটি কনটেইনার বিল্ড করা প্রয়োজন, তারপর একটি কনটেইনার রেজিস্ট্রিতে পুশ করতে হবে - যা একটি অনলাইন স্টোরেজ যেখানে আমরা তা সংরক্ষণ করতে পারি। IoT Edge তারপর রেজিস্ট্রি থেকে কন্টেইনারটি ডাউনলোড করে আমাদের ডিভাইসে পুশ করতে পারবে।
![THe Azure Container Registry logo](../../../../images/azure-container-registry-logo.png)
এই পাঠের জন্য যে কন্টেইনার রেজিস্ট্রি ব্যবহার করব তা হল Azure Container Registry। এটি কোন ফ্রী সার্ভিস নয়, তাই অর্থের অপচয় রোধ করার জন্য কাজ শেষ হওয়ার পর আমাদেরকে [clean up your project](../../../clean-up.md) অনুসরণ করে এটি বন্ধ করে দিতে হবে।
> 💁 Azure Container Registry ব্যবহারের খরচ আমরা [Azure Container Registry pricing page](https://azure.microsoft.com/pricing/details/container-registry/?WT.mc_id=academic-17441-jabenn) থেকে দেখতে পারি ।
### কাজ - Docker ইন্সটল করা
ক্লাসিফায়ার বিল্ড এবং ডেপলয় করার জন্য আমাদেরকে [Docker](https://www.docker.com/) ইন্সটল করে রাখতে হবে।
1. [Docker install page](https://www.docker.com/products/docker-desktop) থেকে দেখে নিই কীভাবে এটি ইন্সটল করতে হবে।
### কাজ - container registry resource তৈরী
1. Azure Container Registry resource তৈরীর জন্য টার্মিনাল বা কমান্ড প্রম্পট থেকে নীচের কমান্ড রান দিই:
```sh
az acr create --resource-group fruit-quality-detector \
--sku Basic \
--name <Container registry name>
```
`<Container registry name>` এর স্থলে একটি ইউনিক নাম দিই কেবল অক্ষর ও সংখ্যা ব্যবহার করে। এক্ষেত্রে `fruitqualitydetector`এর কাছাকাছি কোন নাম দেয়াই সমীচীন হবে। কন্টেইনার রেজিস্ট্রি তে একসেস করার জন্য URL এর একটি অংশে এই নাম ব্যবহৃত হবে। তাই নামটিকে ইউনিক হতে হবে।
1. নিম্নের কমান্ড ব্যবহার করে Azure Container Registry তে লগিন করি:
```sh
az acr login --name <Container registry name>
```
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই
1. Container registry টি admin mode এ সেট করি যাতে পাসওয়ার্ড সেট করা যায়ঃ
```sh
az acr update --admin-enabled true \
--name <Container registry name>
```
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই।
1. নিম্নের কমান্ড দিয়ে পাসওয়ার্ড সেট করি:
```sh
az acr credential renew --password-name password \
--output table \
--name <Container registry name>
```
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই
`PASSWORD` এর ভ্যালুটি কপি করে কোথাও সংরক্ষণ করে রাখি কেননা পরে এটির প্রয়োজন হবে
### কাজ - কন্টেইনার তৈরী করা
আমরা কাস্টম ভিশন থেকে যা ডাউনলোড করেছিলাম তা একটি ডকারফাইল যা কন্টেইনারটি কীভাবে তৈরি করা উচিত তার নির্দেশাবলী, অ্যাপ্লিকেশন কোড সহ কাস্টম ভিশন মডেল হোস্ট করার প্রয়োজনীয় ফাইল এবং REST API রয়েছে। আমরা DockerFile থেকে একটি ট্যাগযুক্ত কন্টেইনার তৈরি করতে Docker ব্যবহার করতে পারি, তারপর কন্টেইনার রেজিস্ট্রিতে এটি পুশ করে দিই।
> 🎓 কনটেইনারগুলিকে একটি ট্যাগ দেওয়া হয় যা তাদের জন্য একটি নাম এবং সংস্করণ নির্ধারণ করে। যখন একটি কন্টেইনার আপডেট করার প্রয়োজন তখন আমরা এটি একই ট্যাগ দিয়ে তৈরি করতে পারি কিন্তু ভিন্ন ভার্সনে।
1. টার্মিনাল বা কমান্ড প্রম্পট থেকে ন্যাভিগেট করে কা্সটম ভিশনের unzipped model এ যাই।
1. নিম্নের কমান্ড দিয়ে ইমেজগুলো বিল্ড এবং ট্যাগ করি:
```sh
docker build --platform <platform> -t <Container registry name>.azurecr.io/classifier:v1 .
```
এখন `<platform>` এর স্থলে যে প্লাটফর্মে কন্টেইনার রান করবে, সেটি দিই। রাস্পবেরি পাই হলে `linux/arm64`, য়ার অন্যসব কিছুতেই `linux/amd64` দিতে হবে।
> 💁 একই ডিভাইস থেকে IoT Edge চালানো এবং এই কমান্ডঅগুলো রান করা হলে, `--platform <platform>` অংশটি বাদ দেয়া যেতে পারে কেননা ডিফল্ট হিসেবে এটি কমান্ড চলমান ডিভাইস্টিকে সিলেক্ট করে রাখে।
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই
> 💁 লিনাক্স ব্যবহারকারী করে হলে, এই কমান্ড রান করার জন্য `sudo` যোগ করতে হতে পারে।
Docker এখানে ইমেজ তৈরি করবে, প্রয়োজনীয় সব সফটওয়্যার কনফিগার করবে। তারপর ছবিটি `classifier:v1` হিসেবে ট্যাগ করা হবে।
```output
➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker build --platform linux/amd64 -t fruitqualitydetectorjimb.azurecr.io/classifier:v1 .
[+] Building 102.4s (11/11) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 131B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/library/python:3.7-slim
=> [internal] load build context
=> => transferring context: 905B
=> [1/6] FROM docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
=> => resolve docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
=> => sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda 27.15MB / 27.15MB
=> => sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9 2.77MB / 2.77MB
=> => sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8 10.06MB / 10.06MB
=> => sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 1.86kB / 1.86kB
=> => sha256:44073386687709c437586676b572ff45128ff1f1570153c2f727140d4a9accad 1.37kB / 1.37kB
=> => sha256:3d94f0f2ca798607808b771a7766f47ae62a26f820e871dd488baeccc69838d1 8.31kB / 8.31kB
=> => sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41 233B / 233B
=> => sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f 2.64MB / 2.64MB
=> => extracting sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda
=> => extracting sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9
=> => extracting sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8
=> => extracting sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41
=> => extracting sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f
=> [2/6] RUN pip install -U pip
=> [3/6] RUN pip install --no-cache-dir numpy~=1.17.5 tensorflow~=2.0.2 flask~=1.1.2 pillow~=7.2.0
=> [4/6] RUN pip install --no-cache-dir mscviplib==2.200731.16
=> [5/6] COPY app /app
=> [6/6] WORKDIR /app
=> exporting to image
=> => exporting layers
=> => writing image sha256:1846b6f134431f78507ba7c079358ed66d944c0e185ab53428276bd822400386
=> => naming to fruitqualitydetectorjimb.azurecr.io/classifier:v1
```
### কাজ - কন্টেইনারকে কন্টেইনার রেজিস্ট্রিতে পুশ করা
1. কন্টেইনারকে কন্টেইনার রেজিস্ট্রিতে পুশ করার জন্য নিম্নের কমান্ড রান দিই:
```sh
docker push <Container registry name>.azurecr.io/classifier:v1
```
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই
> 💁 লিনাক্স ব্যবহারকারী করে হলে, এই কমান্ড রান করার জন্য `sudo` যোগ করতে হতে পারে।
কন্টেইনারটি পুশ হয়ে যাবে।
```output
➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker push fruitqualitydetectorjimb.azurecr.io/classifier:v1
The push refers to repository [fruitqualitydetectorjimb.azurecr.io/classifier]
5f70bf18a086: Pushed
8a1ba9294a22: Pushed
56cf27184a76: Pushed
b32154f3f5dd: Pushed
36103e9a3104: Pushed
e2abb3cacca0: Pushed
4213fd357bbe: Pushed
7ea163ba4dce: Pushed
537313a13d90: Pushed
764055ebc9a7: Pushed
v1: digest: sha256:ea7894652e610de83a5a9e429618e763b8904284253f4fa0c9f65f0df3a5ded8 size: 2423
```
1. Push ঠিকমত হয়েছে কিনা তা ভেরিফাই করার জন্য কন্টেইনারের লিস্ট দেখতে পারি:
```sh
az acr repository list --output table \
--name <Container registry name>
```
`<Container registry name>` এর স্থলে কন্টেনার রেজিস্ট্রি এর নাম বসাই
```output
➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux az acr repository list --name fruitqualitydetectorjimb --output table
Result
----------
classifier
```
ক্লাসিফায়ারের লিস্ট চলে আসবে।
## কন্টেইনার ডেপ্লয় করা
কন্টেইনার এখন আইওটি এজ ডিভাইসে স্থাপন করা যেতে পারে। ডেপ্লয় করার জন্য একটি deployment manifest কে ডিফাইন করতে হবে - এটি একটি JSON ডকুমেন্ট যা Edgeডিভাইসে মডিউলগুলি তালিকাভুক্ত করে।
### কাজ - deployment manifest তৈরী করা
1. আমাদের কম্পিউটারে `deployment.json` নামে একটি ফাইল তৈরী করি।
1. নিম্নের অংশটুকু সেই ফাইলে যোগ করি:
```json
{
"content": {
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
"schemaVersion": "1.1",
"runtime": {
"type": "docker",
"settings": {
"minDockerVersion": "v1.25",
"loggingOptions": "",
"registryCredentials": {
"ClassifierRegistry": {
"username": "<Container registry name>",
"password": "<Container registry password>",
"address": "<Container registry name>.azurecr.io"
}
}
}
},
"systemModules": {
"edgeAgent": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.1",
"createOptions": "{}"
}
},
"edgeHub": {
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.1",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
},
"modules": {
"ImageClassifier": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "<Container registry name>.azurecr.io/classifier:v1",
"createOptions": "{\"ExposedPorts\": {\"80/tcp\": {}},\"HostConfig\": {\"PortBindings\": {\"80/tcp\": [{\"HostPort\": \"80\"}]}}}"
}
}
}
}
},
"$edgeHub": {
"properties.desired": {
"schemaVersion": "1.1",
"routes": {
"upstream": "FROM /messages/* INTO $upstream"
},
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
}
}
}
```
> 💁 এই ফাইলটি [code-deployment/deployment](code-deployment/deployment) folder এ পাওয়া যাবে।
৩টি `<Container registry name>` এর জায়গায় আমাদের ব্যবহৃত container registry এর নাম বসাই। ১টি `ImageClassifier` মডিউলে, বাকি ২টি `registryCredentials` অংশে রয়েছে।
এখন `<Container registry password>` অংশের `registryCredentials` সেকশনে পাসওয়ার্ড দিই।
1. যে ফোল্ডারে deployment manifest রয়েছে সেখানে নিম্নের কমান্ড রান করি:
```sh
az iot edge set-modules --device-id fruit-quality-detector-edge \
--content deployment.json \
--hub-name <hub_name>
```
`<hub_name>` এর স্থলে আমাদের IoT Hub এর নাম বসাই।
Edge ডিভাইসে ইমেজ ক্লাসিফায়ার মডিউলটি ডেপ্লয় হয়ে যাবে।
### কাজ - ক্লাসিফায়ারটি চলছে কিনা তা ভেরিফাই করা
1. IoT edge device এ কানেক্ট করা:
* Raspberry Pi ব্যবহারকারী হলে, কানেক্ট করতে হবে হয় ssh দিয়ে terminal থেকে থেকে অথবা কোন VS Code থেকে কোন remote SSH session ব্যবহার করে।
* উইন্ডোজে Linux container ব্যবহারকারী হলে, [verify successful configuration guide](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge-on-windows?WT.mc_id=academic-17441-jabenn&view=iotedge-2018-06&tabs=powershell#verify-successful-configuration) টি অনুসরণ করতে হবে।
* Virtual machine ব্যবহারকারী হলে, `adminUsername` এবং `password` সেট করার সময়ই SSH করে রাখা যায়
```sh
ssh <adminUsername>@<IP address>
```
অথবা:
```sh
ssh <adminUsername>@<DNS Name>
```
পাসওয়ার্ড চাইলে, তা প্রবেশ করাই।
1. কানেক্ট হয়ে গেলে, IoT Edge module গুলো দেখার জন্য নিম্নের কমান্ড রান দিই :
```sh
iotedge list
```
> 💁 এখানে `sudo` কমান্ড ব্যবহারের প্রয়োজন হতে পারে।
রানিং মডিউলগুলো দেখা যাবে:
```output
jim@fruit-quality-detector-jimb:~$ iotedge list
NAME STATUS DESCRIPTION CONFIG
ImageClassifier running Up 42 minutes fruitqualitydetectorjimb.azurecr.io/classifier:v1
edgeAgent running Up 42 minutes mcr.microsoft.com/azureiotedge-agent:1.1
edgeHub running Up 42 minutes mcr.microsoft.com/azureiotedge-hub:1.1
```
1. Image classifier module এর লগ হিস্টোরি দেখতে নিম্নের কমান্ড রান দিই :
```sh
iotedge logs ImageClassifier
```
> 💁 এই কমান্ড এর সাথে `sudo` ব্যবহারের প্রয়োজন হতে পারে।
```output
jim@fruit-quality-detector-jimb:~$ iotedge logs ImageClassifier
2021-07-05 20:30:15.387144: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2021-07-05 20:30:15.392185: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394450000 Hz
2021-07-05 20:30:15.392712: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ed9ac83470 executing computations on platform Host. Devices:
2021-07-05 20:30:15.392806: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Host, Default Version
Loading model...Success!
Loading labels...2 found. Success!
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
```
### কাজ - ইমেজ ক্লাসিফায়ার টেস্ট করা
1. CURL দিয়ে image classifier টেস্ট করা যায় যেখানে IP address বা আমাদের কম্পিউটারের হোস্ট নেইম ব্যবহার করা হবে যেটিতে IoT Edge agent চলমান রয়েছে। IP address খুজে বের করি:
* IoT Edge যে মেশিনে রান হুচ্ছে সেটি থেকে কাজ করলে, হোস্ট নেম হবে `localhost`
* VM (ভার্চুয়াল মেশিন) থেকে কাজ করলে IP address অথবা ভিএম এর DNS name দিতে হবে।
* অন্যথায় IoT Edge যে মেশিনে চলছে সেটির আইপি এড্রেস জানার অন্য, যা করতে হবে তা হলো:
* Windows 10 এ [find your IP address guide](https://support.microsoft.com/windows/find-your-ip-address-f21a9bbc-c582-55cd-35e0-73431160a1b9?WT.mc_id=academic-17441-jabenn) অনুসরণ করি।
* macOS হলে [how to find you IP address on a Mac guide](https://www.hellotech.com/guide/for/how-to-find-ip-address-on-mac) অনুসরণ করি।
* linux হলে, [how to find your IP address in Linux guide](https://opensource.com/article/18/5/how-find-ip-address-linux) থেকে প্রাইভেট এড্রেসের অংশটি অনুসরণ করি।
1. কন্টেইনারকে লোকাল ফাইল দিয়ে টেস্ট করতে নীচের curl কমান্ড ব্যবহার করি:
```sh
curl --location \
--request POST 'http://<IP address or name>/image' \
--header 'Content-Type: image/png' \
--data-binary '@<file_Name>'
```
`<IP address or name>` এর জায়গায় আমাদের IP address বা host name দিই যেটি থেকে IoT Edge চলছে এবং `<file_Name>` ঙ্গের জায়গায় যে ফাইল দিয়ে টেস্ট করা হবে, সেটির নাম দিই।
আউটপুটে প্রেডিকশন রেজাল্ট দেখা যাবে।
```output
{
"created": "2021-07-05T21:44:39.573181",
"id": "",
"iteration": "",
"predictions": [
{
"boundingBox": null,
"probability": 0.9995615482330322,
"tagId": "",
"tagName": "ripe"
},
{
"boundingBox": null,
"probability": 0.0004384400090202689,
"tagId": "",
"tagName": "unripe"
}
],
"project": ""
}
```
> 💁 এখানে একটি প্রেডিকশন কী (key) সরবরাহ করার প্রয়োজন নেই, কারণ এটি Azure রিসোর্স ব্যবহার করছে না। পাবলিক এন্ডপয়েন্ট এবং এপিআই কী (key) -এর উপর নির্ভর না করে, এর পরিবর্তে অভ্যন্তরীণ নিরাপত্তার প্রয়োজনের ভিত্তিতে অভ্যন্তরীণ নেটওয়ার্কে নিরাপত্তা কনফিগার করা হবে।
## আমাদের IoT Edge device ব্যবহার করা
এখন যেহেতু ইমেজ ক্লাসিফায়ার একটি আইওটি এজ ডিভাইসে স্থাপন করা হয়েছে, এটি আমাদের আইওটি ডিভাইস থেকে ব্যবহার করতে পারবো।
### কাজ - আমাদের IoT Edge device ব্যবহার
IoT Edge classifier দিয়ে ছবি ক্লাসিফাই করতে, নিম্নের গাইডগুলো অনুসরণ করি:
* [Arduino - Wio Terminal](../wio-terminal.md)
* [Single-board computer - Raspberry Pi/Virtual IoT device](../single-board-computer.md)
### Model retraining
IoT Edge- এ ইমেজ ক্লাসিফায়ার চালানোর একটি সমস্যা হল এগুলি কাস্টম ভিশন প্রজেক্টের সাথে সংযুক্ত নয়। যদি কাস্টম ভিশনে **Predictions** ট্যাবটি দেখি, তবে এজ-ভিত্তিক ক্লাসিফায়ার ব্যবহার করে শ্রেণীবদ্ধ করা ছবিগুলি দেখতে পাব না।
সত্যি বলতে গেলে এটি একেবারে প্রত্যাশিত একটি আচরণ - ছবিগুলি ক্লাউডে শ্রেণিবিন্যাসের জন্য পাঠানো হয় না, তাই সেগুলি ক্লাউডে পাওয়া যাবে না। আইওটি এজ ব্যবহার করার একটি সুবিধা হল গোপনীয়তা, নিশ্চিত করা যে ছবিগুলি আমাদের নেটওয়ার্ক এর বাইরে যাবেনা। আবার এটি অফলাইনে কাজ করতে সক্ষম হচ্ছে, তাই যখন ডিভাইসে ইন্টারনেট সংযোগ নেই তখন ছবি আপলোড করার উপর নির্ভর করে না। নেতিবাচক দিকটি হলো যে আমাদের মডেলের উন্নতি ঠিকমত হচ্ছেনা - আমাদেরকে ইমেজ ক্লাসিফায়ারের উন্নতি এবং পুনরায় প্রশিক্ষণের জন্য ম্যানুয়ালি পুনরায় ক্লাসিফাই করা যায় এমন ছবি সংরক্ষণের অন্য উপায় বাস্তবায়ন করতে হবে।
✅ ক্লাসিফায়ার পুনরায় প্রশিক্ষণ দেওয়ার জন্য ছবি আপলোড করার উপায় সম্পর্কে চিন্তা করি।
---
## 🚀 চ্যালেঞ্জ
Edge ডিভাইসে AI মডেল চালানো ক্লাউডের তুলনায় দ্রুততর হতে পারে - কারণ সেখানে network hop ছোট । তবে হার্ডওয়্যার এর ফলে তা ধীরও হতে পারে ,আর তাই মডেলটি ক্লাউডের মতো শক্তিশালী নাও হতে পারে।
সময়ক্ষেপন এর নোট নিই এবং তুলনা করি আমাদের Edge ডিভাইসে কাজ, ক্লাউডে কাজ করার চেয়ে দ্রুত বা ধীর - কোনটি ঘটে? পার্থক্য এর কারণ, বা পার্থক্য না থাকলে সেটি সম্পর্কে চিন্তা করি। বিশেষ হার্ডওয়্যার ব্যবহার করে Edge ডিভাইসে এআই মডেলগুলি দ্রুত চালানোর উপায়গুলি গবেষণা করি।
## লেকচার-পরবর্তী কুইজ
[লেকচার-পরবর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/34)
## রিভিউ এবং স্ব-অধ্যয়ন
* কন্টেইনার সম্পর্কে জানতে পড়তে পারি - [OS-level virtualization page on Wikipedia](https://wikipedia.org/wiki/OS-level_virtualization)
* Edge computing সম্পর্কে জানতে হলে, পড়তে পারি - [what is edge computing and why does it matter? article on NetworkWorld](https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html)
* IoT Edge এ চলমান AI service সম্পর্কে জানতে হলে, পড়তে পারি - [learn how to use Azure IoT Edge on a pre-built AI service on the Edge to do language detection episode of Learn Live on Microsoft Channel9](https://channel9.msdn.com/Shows/Learn-Live/Sharpen-Your-AI-Edge-Skills-Episode-4-Learn-How-to-Use-Azure-IoT-Edge-on-a-Pre-Built-AI-Service-on-t?WT.mc_id=academic-17441-jabenn)
## এসাইনমেন্ট
[Edge এ বিভিন্ন সার্ভিস পরিচালনা করা](assignment.bn.md)

@ -0,0 +1,14 @@
# Edge এ বিভিন্ন সার্ভিস পরিচালনা করা
## নির্দেশাবলী
Edge এ যে কেবল ইমেজ ক্লাসিফায়ার চালানো যায় তা কিন্তু নয়, বরং যেকোন কাজ যা একটি কন্টেইনারে প্যাকেজ করা যায় তা IoT Edge ডিভাইসে স্থাপন করা যেতে পারে। সার্ভারলেস কোড যা Azure Functions হিসাবে চলে, যেমন আগের লেসনগুলিতে তৈরি ট্রিগারগুলি কন্টেইনারে চালানো যেতে পারে এবং এর জন্য IoT Edge এও তা চলবে।
পূর্ববর্তী পাঠগুলির মধ্যে একটি বেছে নিই এবং IoT Edge কন্টেইনারে Azure Functions অ্যাপটি চালানোর চেষ্টা করি। কিভাবে একটি ভিন্ন Functions App প্রজেক্ট ব্যবহার করে করা যায় তার জন্য [টিউটোরিয়াল: Azure Functions কে IoT Edge modules হিসেবে ডেপ্লয় করা](https://docs.microsoft.com/azure/iot-edge/tutorial-deploy-function?WT.mc_id=academic-17441-jabenn&view=iotedge-2020-11) দেখতে পারি।
## এসাইনমেন্ট মূল্যায়ন মানদন্ড
| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) |
| --------- | ------------------ | -------------- | -------------------- |
| Azure Functions কে IoT Edge এ ডেপ্লয় করা | IoT Edge এ একটি Azure Functions App ডেপ্লয় করে, আইওটি ডেটা থেকে ট্রিগার চালানোর জন্য আইওটি ডিভাইসের সাথে এটি ব্যবহার করতে সফল হয়েছিল | IoT Edge এ একটি Functions App স্থাপন করতে সক্ষম হয়েছিল, কিন্তু ট্রিগারটি দিয়ে কাজ সম্পন্ন করতে পারেনি | IoT Edge এ একটি Functions App স্থাপন করতে ব্যার্থ ছিল|

@ -10,7 +10,7 @@
## Introduction
An IoT application is not just a single device capturing data and sending it to the cloud, it is more often that not multiple devices all working together to capture data from the physical world using sensors, make decisions based off that data, and interacting back with the physical world via actuators or visualizations.
An IoT application is not just a single device capturing data and sending it to the cloud, it is more often than not multiple devices all working together to capture data from the physical world using sensors, make decisions based off that data, and interacting back with the physical world via actuators or visualizations.
In this lesson you will learn more about architecting complex IoT applications, incorporating multiple sensors, multiple cloud services to analyze and store data, and showing a response via an actuator. You will learn how to architect a fruit quality control system prototype, including about using proximity sensors to trigger the IoT application, and what the architecture of this prototype would be.
@ -105,7 +105,7 @@ For the prototype, you will implement all of this on a single device. If you are
## Trigger fruit quality checking from a sensor
The IoT device needs some kind of trigger to indicate when fruit is ready to be classified. One trigger for this would be to measure when the fruit is at the right location on the conveyor belt my measuring the distance to a sensor.
The IoT device needs some kind of trigger to indicate when fruit is ready to be classified. One trigger for this would be to measure when the fruit is at the right location on the conveyor belt by measuring the distance to a sensor.
![Proximity sensors send laser beams to objects like bananas and time how long till the beam is bounced back](../../../images/proximity-sensor.png)

@ -1,9 +0,0 @@
# Dummy File
This file acts as a placeholder for the `translations` folder. <br>
**Please remove this file after adding the first translation**
For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) .
## THANK YOU
We truly appreciate your efforts!

@ -0,0 +1,26 @@
# উৎপাদন এবং প্রক্রিয়াকরণ - খাদ্য প্রক্রিয়াজাতকরণে IoT এর ব্যবহার
একবার খাদ্য একটি কেন্দ্রীয় হাব বা প্রক্রিয়াকরণ কারখানায় পৌঁছে গেলে, এটি যে সরাসরি সুপার মার্কেটে পাঠানো হয় তা কিন্তু সবসময় সত্য নয়। অনেক সময় খাদ্য প্রক্রিয়াজাতকরণের কয়েকটি ধাপের মধ্য দিয়ে যায়, যেমন গুণমান অনুসারে বাছাই করা। এটি একটি প্রক্রিয়া যা আগে মানুষ নিজে করতো - এটি শস্যক্ষেত থেকেই শুরু হতো এবং বাছাইকারীরা কেবল পাকা ফল আলাদা করতো, তারপর কারখানায় ফল একটি কনভেয়ার বেল্টে চড়তো এবং কর্মচারীরা ম্যানুয়ালি যে কোনও ক্ষত বা পচা ফল সরিয়ে দেবে। স্কুলজীবনে গ্রীষ্মকালীন চাকরি হিসেবে স্ট্রবেরি বাছাই করার কাজ করে, আমি সাক্ষ্য দিতে পারি যে এটি খুব একটা মজাদার কাজ নয়।
তখন কিছু আধুনিক সেটআপগুলোতে বাছাইয়ের জন্য IoT- এর উপর নির্ভর করে। [Weco](https://wecotek.com) এর মতো প্রথম দিকের কিছু যন্ত্র ছিলো, যেগুলো উৎপাদনের মান সনাক্ত করতে অপটিক্যাল সেন্সর ব্যবহার করে, উদাহরণস্বরূপ সবুজ টমেটো প্রত্যাখ্যান করে। এগুলি খামারেইবা প্রক্রিয়াকরণ কারখানায় স্থাপন করা যেতে পারে।
আর্টিফিশিয়াল ইন্টেলিজেন্স (এআই) এবং মেশিন লার্নিং (এমএল) -এর অগ্রগতির ফলে, এই মেশিনগুলি আরও উন্নত হয়ে উঠতে পারছে, এমএল মডেল ব্যবহার করে ফল এবং বিদেশী বস্তু যেমন পাথর, ময়লা বা পোকামাকড়ের মধ্যে পার্থক্য করতে পারছে। এই মডেলগুলিকে ফলের গুণাগুণ সনাক্ত করার জন্য প্রশিক্ষণ দেওয়া যেতে পারে; কেবলমাত্র ফেটে যাওয়া ফলই নয় বরং ফসলের রোগ বা অন্যান্য সমস্যা প্রাথমিকভাবে সনাক্তকরণ করাক যেতে পারে।
> 🎓 *এমএল মডেল* শব্দটি ডেটা সেটের প্রশিক্ষিত (trained) মেশিন লার্নিং সফটওয়্যারের আউটপুটকে বোঝায়। উদাহরণস্বরূপ, একটি এমএল মডেলকে পাকা এবং কাঁচা টমেটোর মধ্যে পার্থক্য করতে প্রশিক্ষণ দেয়া যায়, তারপর টমেটো পাকা কি না তা দেখতে নতুন ছবিতে মডেলটি ব্যবহার করতে পারি।
এই 4টি পাঠে আমরা শিখব কিভাবে ফলের গুণমান সনাক্ত করতে ইমেজ-ভিত্তিক এআই মডেলগুলিকে প্রশিক্ষণ দিতে হয়, কিভাবে একটি আইওটি ডিভাইস থেকে এগুলি ব্যবহার করতে হয় এবং কীভাবে এগুলি Edge ডিভাইস হিসেবে চালাতে হয় - যেটি ক্লাউডের পরিবর্তে একটি আইওটি ডিভাইসে কাজ করবে ।
> 💁 এই লেসনগুলোতে আমরা কিছু ক্লাউড রিসোর্স ব্যবহার করবো। এখানে সবগুলো প্রজেক্ট সম্পূর্ণ না হলেও, আমাদেরকে [প্রজেক্ট ক্লীন-আপ](../translations/clean-up.bn.md) করতে হবে।
## পাঠ্যসূচি
1. [খাদ্যপণ্যের গুণমান সনাক্তকারীকে প্রশিক্ষণ প্রদান](./lessons/1-train-fruit-detector/translations/README.bn.md)
1. [একটি IoT ডিভাইস থেকে ফলের গুণমান পরীক্ষাকরণ](./lessons/2-check-fruit-from-device/translations/README.bn.md)
1. [ফলের মান সনাক্তকারী প্রোগ্রাম কে Edge এ চালানো](./lessons/3-run-fruit-detector-edge/translations/README.bn.md)
1. [সেন্সরের মাধ্যমে ফলের মান সনাক্তকারীকে চালনা করা](./lessons/4-trigger-fruit-detector/translations/README.bn.md)
## ক্রেডিট
♥️ ভালোবাসার সাথে প্রতিটি অধ্যায় লিখেছেন [Jen Looper](https://github.com/jlooper) এবং [Jim Bennett](https://GitHub.com/JimBobBennett)

@ -0,0 +1,19 @@
# खुदरा - स्टॉक स्तरों को प्रबंधित करने के लिए IoT का उपयोग करना
उपभोक्ताओं तक पहुंचने से पहले फ़ीड के लिए अंतिम चरण खुदरा है - बाजार, किराने का सामान, सुपरमार्केट और स्टोर जो उपभोक्ताओं को उत्पाद बेचते हैं। ये स्टोर यह सुनिश्चित करना चाहते हैं कि उपभोक्ताओं के देखने और खरीदने के लिए इनके पास अलमारियों पर उत्पादन हो।
खाद्य भंडारों में, विशेष रूप से बड़े सुपरमार्केट में, सबसे अधिक मैनुअल, समय लेने वाले कार्यों में से एक यह सुनिश्चित करना है कि अलमारियों को स्टॉक किया गया है या नहीं और यह सुनिश्चित करने के लिए अलग-अलग अलमारियों की जाँच करना कि किसी भी अंतराल को स्टोर रूम से उपज से भरा गया है या नहीं।
IoT इसमें मदद कर सकता है, स्टॉक गिनने के लिए IoT उपकरणों पर चलने वाले AI मॉडल का उपयोग करके, मशीन लर्निंग मॉडल का उपयोग करके जो न केवल छवियों को वर्गीकृत करते हैं, बल्कि व्यक्तिगत वस्तुओं का पता लगा सकते हैं और उन्हें गिन सकते हैं।
इन 2 पाठों में आप सीखेंगे कि स्टॉक की गणना करने के लिए छवि-आधारित AI मॉडल को कैसे प्रशिक्षित किया जाए, और कैसे इन मॉडलों को IoT उपकरणों पर चलाया जाए।
> 💁 ये पाठ कुछ क्लाउड संसाधनों का उपयोग करेंगे। यदि आप इस परियोजना के सभी पाठों को पूरा नहीं करते हैं, तो सुनिश्चित करें कि आप [अपना प्रोजेक्ट साफ़ करें](../clean-up.md)।
## विषय
1. [स्टॉक डिटेक्टर को प्रशिक्षित करें](./lessons/1-train-stock-detector/README.md)
1. [IoT डिवाइस से स्टॉक की जांच करें](./lessons/2-check-stock-device/README.md)
## क्रेडिट
सभी पाठ [जिम बेनेट] द्वारा के साथ लिखे गए थे (https://GitHub.com/JimBobBennett)

@ -19,7 +19,7 @@ In this lesson you will learn about language understanding models, how to create
In this lesson we'll cover:
* [Language understanding](#language-understanding)
* [Create a language understanding model](create-a-language-understanding-model)
* [Create a language understanding model](#create-a-language-understanding-model)
* [Intents and entities](#intents-and-entities)
* [Use the language understanding model](#use-the-language-understanding-model)

@ -42,7 +42,7 @@ Text translation has been a computer science problem that has been researched fo
Text translation started out as a technology known as Machine Translation (MT), that can translate between different language pairs. MT works by substituting words in one language with another, adding techniques to select the correct ways of translating phrases or parts of sentences when a simple word-for-word translation doesn't make sense.
> 🎓 When translators support translating between one language and another, these are know as *language pairs*. Different tools support different language pairs, and these may not be complete. For example, a translator may support English to Spanish as a language pair, and Spanish to Italian as a language pair, but not English to Italian.
> 🎓 When translators support translating between one language and another, these are known as *language pairs*. Different tools support different language pairs, and these may not be complete. For example, a translator may support English to Spanish as a language pair, and Spanish to Italian as a language pair, but not English to Italian.
For example, translating "Hello world" from English into French can be performed with a substitution - "Bonjour" for "Hello", and "le monde" for "world", leading to the correct translation of "Bonjour le monde".

@ -5,6 +5,8 @@ agree to a Contributor License Agreement (CLA) declaring that you have the right
and actually do, grant us the rights to use your contribution. For details, visit
https://cla.microsoft.com.
> Important: when translating text in this repo, please ensure that you do not use machine translation. We will verify translations via the community, so please only volunteer for translations in languages where you are proficient.
When you submit a pull request, a CLA-bot will automatically determine whether you need
to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the
instructions provided by the bot. You will only need to do this once across all repositories using our CLA.

@ -77,7 +77,7 @@ We have two choices of IoT hardware to use for the projects depending on persona
## Lessons
| | Project Name | Concepts Taught | Learning Objectives | Linked Lesson |
| :-: | :----------: | :-------------: | ------------------- | :-----------: |
| :---: | :------------------------------------: | :---------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------: |
| 01 | [Getting started](./1-getting-started) | Introduction to IoT | Learn the basic principles of IoT and the basic building blocks of IoT solutions such as sensors and cloud services whilst you are setting up your first IoT device | [Introduction to IoT](./1-getting-started/lessons/1-introduction-to-iot/README.md) |
| 02 | [Getting started](./1-getting-started) | A deeper dive into IoT | Learn more about the components of an IoT system, as well as microcontrollers and single-board computers | [A deeper dive into IoT](./1-getting-started/lessons/2-deeper-dive/README.md) |
| 03 | [Getting started](./1-getting-started) | Interact with the physical world with sensors and actuators | Learn about sensors to gather data from the physical world, and actuators to send feedback, whilst you build a nightlight | [Interact with the physical world with sensors and actuators](./1-getting-started/lessons/3-sensors-and-actuators/README.md) |
@ -130,6 +130,7 @@ Our team produces other curricula! Check out:
- [Web Dev for Beginners](https://aka.ms/webdev-beginners)
- [ML for Beginners](https://aka.ms/ml-beginners)
- [Data Science for Beginners](https://aka.ms/datascience-beginners)
## Image attributions

@ -17,6 +17,12 @@ When translating the initial Readme, link the other translations to your transla
where _[language]_ is a two letter language abbreviation following the ISO 639-1 standard (e.g. `README.es.md` for Spanish and `README.nl.md` for Dutch).
> Important: when translating text in this repo, please ensure that you do not use machine translation. We will verify translations via the community, so please only volunteer for translations in languages where you are proficient.
## Links
When translating, please update links to the translated files. If a file hasn't been translated, keep the link to the English version. As each file is in a `translations` folder, you will also need to update the link depth for hyperlinks and images.
## Quizzes
Add your translation to the quiz-app by adding a file here: https://github.com/microsoft/IoT-For-Beginners/tree/main/quiz-app/src/assets/translations. Please don't localize the words 'true' or 'false' however. thanks!

@ -0,0 +1,51 @@
# [Topik Pelajaran]
![Sematkan video di sini](video-url)
## [Kuis Pra-Kuliah](quiz-url)
[Jelaskan apa yang akan kita pelajari]
### Pengenalan
Jelaskan apa yang akan dibahas
> Catatan
### Prasyarat
Langkah-langkah apa yang seharusnya sudah dibahas sebelum pelajaran ini?
### Persiapan
Langkah-langkah persiapan untuk memulai pelajaran ini
---
[Melangkah melalui konten dalam blok]
## [Topik 1]
### Tugas:
Bekerja sama untuk meningkatkan *codebase* anda secara progresif untuk membangun proyek dengan kode bersama:
```html
blok kode
```
✅ Cek Pengetahuan - gunakan momen ini untuk memperluas pengetahuan siswa dengan membuka pertanyaan
## [Topik 2]
## [Topik 3]
🚀 Tantangan: Tambahkan sebuah tantangan kepada siswa untuk dikerjakan secara kolaboratif di kelas untuk menyempurnakan project
Opsional: tambahkan tangkapan layar UI dari pelajaran yang telah selesai jika sesuai
## [Kuis Setelah Kuliah](quiz-url)
## Ulasan & Belajar Mandiri
**Keterlambatan Tugas [MM/YY]**: [Nama Tugas](assignment.md)

@ -0,0 +1,9 @@
# [Nama Tugas]
## Instruksi
## Rubrik
| Kriteria | Teladan | Memadai | Perlu Perbaikan |
| -------- | --------- | -------- | ----------------- |
| | | | |

@ -9,8 +9,10 @@
[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/)
[![English](https://img.shields.io/badge/-English-red)](../README.md)
[![Chinese](https://img.shields.io/badge/-Chinese-yellow)](README.zh-cn.md)
[![Turkish](https://img.shields.io/badge/-Turkish-darkgreen)](README.tr.md)
[![Chinese](https://img.shields.io/badge/-Chinese-yellow)](translations/README.zh-cn.md)
[![Turkish](https://img.shields.io/badge/-Turkish-darkgreen)](translations/README.tr.md)
[![French](https://img.shields.io/badge/-French-purple)](translations/README.fr.md)
# বিগিনারদের জন্য আইওটি - একটি সুবিন্যস্ত পাঠ্যক্রম
@ -24,7 +26,7 @@
**হৃদয়ের অন্তঃস্থল থেকে কৃতজ্ঞতা জানাই এই কোর্সের রচয়িতা [Jen Fox](https://github.com/jenfoxbot), [Jen Looper](https://github.com/jlooper), [Jim Bennett](https://github.com/jimbobbennett) এবং স্কেচনোট শিল্পী [Nitya Narasimhan](https://github.com/nitya)কে ।**
**ধন্যবাদ জানাতে চাই আমাদের সেসকল [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn)দের, যারা এই কারিক্যুলামটি রিভিউ এবং অনুবাদে কাজ করেছে - [Aditya Garg](https://github.com/AdityaGarg00),[Anurag Sharma](https://github.com/Anurag-0-1-A), [Arpita Das](https://github.com/Arpiiitaaa), [Aryan Jain](https://www.linkedin.com/in/aryan-jain-47a4a1145/), [Bhavesh Suneja](https://github.com/EliteWarrior315),[Faith Hunja](https://faithhunja.github.io/), [Lateefah Bello](https://www.linkedin.com/in/lateefah-bello/), [Manvi Jha](https://github.com/Severus-Matthew), [Mireille Tan](https://www.linkedin.com/in/mireille-tan-a4834819a/), [Mohammad Iftekher (Iftu) Ebne Jalal](https://github.com/Iftu119), [Priyanshu Srivastav](https://www.linkedin.com/in/priyanshu-srivastav-b067241ba), [Thanmai Gowducheruvu](https://github.com/innovation-platform), এবং [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).**
**ধন্যবাদ জানাতে চাই আমাদের সেসকল [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn)দের, যারা এই কারিক্যুলামটি রিভিউ এবং অনুবাদে কাজ করেছে - [Aditya Garg](https://github.com/AdityaGarg00),[Anurag Sharma](https://github.com/Anurag-0-1-A), [Arpita Das](https://github.com/Arpiiitaaa), [Aryan Jain](https://www.linkedin.com/in/aryan-jain-47a4a1145/), [Bhavesh Suneja](https://github.com/EliteWarrior315),[Faith Hunja](https://faithhunja.github.io/), [Lateefah Bello](https://www.linkedin.com/in/lateefah-bello/), [Manvi Jha](https://github.com/Severus-Matthew), [Mireille Tan](https://www.linkedin.com/in/mireille-tan-a4834819a/), [Mohammad Iftekher (Iftu) Ebne Jalal](https://github.com/Iftu119),[Mohammad Zulfikar](https://github.com/mohzulfikar), [Priyanshu Srivastav](https://www.linkedin.com/in/priyanshu-srivastav-b067241ba), [Thanmai Gowducheruvu](https://github.com/innovation-platform), এবং [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).**
পুরো টীমের সাথে পরিচিত হওয়া যাক !
@ -89,9 +91,9 @@
| 12 | [পরিবহন](../3-transport) | লোকেশন ডেটা সংরক্ষণ | পরবর্তী সময়ে বিশ্লেষণ বা চিত্রভিত্তিক ডেটা প্রদর্শন (Visualization) এর জন্য আইওটি ডেটা কীভাবে স্টোর করা যায় তা জানা | [লোকেশন ডেটা সংরক্ষণ](../3-transport/lessons/2-store-location-data/translations/README.bn.md) |
| 13 | [পরিবহন](../3-transport) | লোকেশন ডেটা প্রদর্শন |মানচিত্রে অবস্থানের ডেটা প্রদর্শন করা এবং মানচিত্রগুলি কীভাবে ২টি মাত্রায় বাস্তব ত্রিমাত্রিক বিশ্বের উপস্থাপন করে সে সম্পর্কে জ্ঞান অর্জন | [লোকেশন ডেটা প্রদর্শন](../3-transport/lessons/3-visualize-location-data/translations/README.bn.md) |
| 14 | [পরিবহন](../3-transport) | Geofences | Geofences সম্পর্কে জানা এবং কীভাবে এটি ব্যবহার করে সাপ্লাই চেইনের বিভিন্ন পর্যায়ের বাহনগুলো যখন গন্তব্যের কাছাকাছি পৌঁছায় তখন এলার্ট দেয়া যায় তা শেখা | [Geofences](../3-transport/lessons/4-geofences/README.md) |
| 15 | [উৎপাদন](../4-manufacturing) | Train a fruit quality detector | ক্লাউডের ছবি শ্রেণিবদ্ধকরণ মডেলকে (Image Classifier) ফলের মান সনাক্ত করতে কীভাবে প্রশিক্ষিত করতে হবে সে সম্পর্কে জানা | [Train a fruit quality detector](../4-manufacturing/lessons/1-train-fruit-detector/README.md) |
| 16 | [উৎপাদন](../4-manufacturing) | Check fruit quality from an IoT device | আইওটি ডিভাইসে ফলের গুণগত মান সনাক্তকারী ব্যবহার | [Check fruit quality from an IoT device](../4-manufacturing/lessons/2-check-fruit-from-device/README.md) |
| 17 | [উৎপাদন](../4-manufacturing) | Run your fruit detector on the edge | ফলের গুণগত মান সনাক্তকারীকে Edge হিসেবে ব্যবহার | [Run your fruit detector on the edge](../4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) |
| 15 | [উৎপাদন](../4-manufacturing) | খাদ্যপণ্যের গুণমান সনাক্তকারী মডেলকে ট্রেনিং প্রদান | ক্লাউডের ছবি শ্রেণিবদ্ধকরণ মডেলকে (Image Classifier) ফলের মান সনাক্ত করতে কীভাবে প্রশিক্ষিত করতে হবে সে সম্পর্কে জানা | [খাদ্যপণ্যের গুণমান সনাক্তকারী মডেলকে ট্রেনিং প্রদান](../4-manufacturing/lessons/1-train-fruit-detector/translations/README.bn.md) |
| 16 | [উৎপাদন](../4-manufacturing) | IoT ডিভাইস ব্যবহার করে ফলের মান যাচাই | আইওটি ডিভাইসে ফলের গুণগত মান সনাক্তকারী ব্যবহার | [IoT ডিভাইস ব্যবহার করে ফলের মান যাচাই](../4-manufacturing/lessons/2-check-fruit-from-device/translations/README.bn.md) |
| 17 | [উৎপাদন](../4-manufacturing) | Edge এ Fruit Detector পরিচালনা করা | ফলের গুণগত মান সনাক্তকারীকে Edge হিসেবে ব্যবহার | [Edge এ Fruit Detector পরিচালনা করা](../4-manufacturing/lessons/3-run-fruit-detector-edge/translations/README.bn.md) |
| 18 | [উৎপাদন](../4-manufacturing) | Trigger fruit quality detection from a sensor | সেন্সর থেকে ফলের গুণাগুণ সনাক্তকরণ নিয়ন্ত্রণ করা শেখা| [Trigger fruit quality detection from a sensor](../4-manufacturing/lessons/4-trigger-fruit-detector/README.md) |
| 19 | [খুচরাপর্যায়](../5-retail) | Train a stock detector | কোনও দোকানে স্টক গণনা করতে স্টক ডিটেক্টরকে প্রশিক্ষণ দেওয়ার জন্য কীভাবে অবজেক্ট সনাক্তকরণ ব্যবহার করা যায় তা শেখা | [Train a stock detector](../5-retail/lessons/1-train-stock-detector/README.md) |
| 20 | [খুচরাপর্যায়](../5-retail) | Check stock from an IoT device | কোন অবজেক্ট সনাক্তকরণ মডেল ব্যবহার করে আইওটি ডিভাইস থেকে স্টক পর্যবেক্ষণ করা শেখা | [Check stock from an IoT device](../5-retail/lessons/2-check-stock-device/README.md) |
@ -112,10 +114,13 @@
npm i
npm run convert
```
### স্লাইড
কিছু কিছু লেসনের স্লাইড ডেক, এখানে [slides](./slides) ফোল্ডারে রয়েছে।
## সাহায্য প্রয়োজন!
অনুবাদের কাজ করে এই কারিক্যুলামে অবদান করতে চান? তাহলে অনুগ্রহ করে আমাদের [অনুবাদ গাইডলাইন](translations/TRANSLATIONS.bn.md) পড়ে , যেকোন একটি [Translation Issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) এ ইনপুট দেয়ার অনুরোধ করা হলো। যদি কোন নতুন ভাষায় অনুবাদ করতে কেউ আগ্রহী হয়, তবে ট্র্যাকিংয়ের জন্য দয়া করে একটি নতুন Issue সাবমিট করতে হবে।
অনুবাদের কাজ করে এই কারিক্যুলামে অবদান করতে চান? তাহলে অনুগ্রহ করে আমাদের [অনুবাদ গাইডলাইন](TRANSLATIONS.md) পড়ে , যেকোন একটি [Translation Issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) এ ইনপুট দেয়ার অনুরোধ করা হলো। যদি কোন নতুন ভাষায় অনুবাদ করতে কেউ আগ্রহী হয়, তবে ট্র্যাকিংয়ের জন্য দয়া করে একটি নতুন Issue সাবমিট করতে হবে।
## অন্য পাঠ্যক্রম সমূহ
@ -123,6 +128,7 @@ npm run convert
- [Web Dev for Beginners](https://aka.ms/webdev-beginners)
- [ML for Beginners](https://aka.ms/ml-beginners)
- [Data Science for Beginners](https://aka.ms/datascience-beginners)
## চিত্রের Attributions

@ -121,7 +121,7 @@ Bir çeviriyle katkıda bulunmak ister miydiniz? Lütfen [çeviri rehberimizi](.
## Diğer Dersler
Takımımız başka derler de yapıyor:
Takımımız başka dersler de yapıyor:
- [Yeni başlayanlar için web geliştiriciliği](https://aka.ms/webdev-beginners)
- [Yeni başlayanlar için makine öğrenimi](https://aka.ms/ml-beginners)

@ -36,7 +36,7 @@ Microsoft 的 Azure Cloud 大使很高兴提供关于 IoT 基础的一个 12 个
> 🎥 点击以上的图片来看这个项目的宣传片!
## 教学法
## 教学
创建这个课程时,我们选择了两个教育原理:确保它基于项目以及它常常包括知识测验。完成课程后,学生们应该创建了一个植物监测和浇水系统、车辆追踪器、为了追踪和检查食物的智能工厂设置以及声控烹饪定时器,还有学会了物联网的基本技能,包括怎么为设备写代码、连接到云、分析遥测以及在边缘上运行人工智能。
@ -117,10 +117,11 @@ npm run convert
## 其它课程
我们的组生成了其它课程!查一下:
我们的团队制作了其它课程!查一下:
- [网站开发Web Dev for Beginners](https://aka.ms/webdev-beginners)
- [机器学习ML for Beginners](https://aka.ms/ml-beginners)
- [数据科学Data Science for Beginners](https://aka.ms/datascience-beginners)
## 图片属性

Loading…
Cancel
Save