چندماه پیش بود که مطلبی در مورد ماژول تشخیص گفتار آفلاین VC-01 منتشر کردم، واقعا جالب و شگفت انگیز بود قابلیت این ماژول در سرعت و دقت، حالا بعد از مدتی برگشتم سراغش تا ببینم آیا میشه به راحتی خودمون براش کلمه تعریف بکنیم و دستورات و عملکرد هایی که میخوایم رو براش مشخص کنیم. جواب مثبت بود و اینکار شدنی بود، اونهم به صورت رایگان (هزینه ای بابت sdk نیاز نیست پرداخت کنید) علاوه بر اون خییلی راحت. خلاصه که حیفم اومد با شما به اشتراک نزارم، پس با سیسوگ همراه باشید تا sdk خودمون رو برای ماژول VC-02 بسازیم.
ماژول AI Thinker VC-02
اول از همه باید بگم که ماژول های تشخیص گفتار آفلاین شرکت ai thinker دو مدل هستند VC-01 و VC-02. اینطور که در مشخصات ارائه شده توسط این شرکت مشخصه این دوتا ماژول تفاوت خاصی ندارند، فقط VC 02 جدیدتر هست و از نظر ابعادی تقریبا نصف VC 01، ما هم در این آموزش از ماژول VC 02 استفاده میکنیم.
در ادامه مشخصات این ماژول رو میتونید بررسی کنید.
Kernel •
32bit RISC core, running at 240MHz
Support DSP instruction set and FPU floating-point operation Unit
FFT Accelerator: Support 1024-point complex FFT/IFFT operations, or 2048-point real
FFT/IFFT operations
Unisound customized speech algorithm operator
Storage •
Built-in 242KB high-speed SRAM
Built-in 2MB FLASH
Audio input and output •
Supports 1 analog Mic input, SNR ≥ 94dB
Support 4-channel digital Mic input
Support dual-channel DAC output
Supports I2S input/output
Power supply and clock •
Support 3.6 V-5V Range Power Input
Built-in 5V to 3.3V,3.3V to 1.2V LDO power the chip
RC 12MHz clock source and PLL locked loop clock source
Built-in POR(Power on Reset), low voltage detection and watchdog
Peripheral •
All GPIOs can be configured as external interrupt input and wake-up source
1 full-duplex UART with a maximum rate of 3Mbps.
Support SPI, I2C, ADC, PWM interface
این تصویر خود ماژول هست.
و این هم برد توسعه ای که توسط خود ai thinker ارائه شده.
شما میتونید تا 150 دستور رو در این ماژول ذخیره کنید که زیادم هست.
ساخت SDK
برای ساخت sdk باید از سایت voice ai-thinker استفاده کنیم، اول از همه یک حساب کاربری توی سایت میسازیم، بعد از اون از منوی کناری گزینه create product رو انتخاب میکنیم. این قسمت دسته بندی تا اونجا که متوجه شدم تاثیری توی خروجی کار نداره و خیلی مهم نیست که چی انتخاب میکنید، اما ما اینجا lamps -> cw light رو انتخاب میکنیم.
شاید برای شما مفید باشد: آموزش الکترونیک از 0 تا 100
حالا دسته offline و سپس ماژول VC 02 رو انتخاب میکنیم.
بعد هم اسم دلخواه و زبان رو انتخاب کنید و save کنید.
در ابتدای مرحله بعد باید وضعیت پین ها رو مشخص کنید که ما تغییری در اون نمیدیم.
حالا در قسمت Wake-up word customization باید جملاتی که میخواید ماژول با اونها بیدار بشه و شروع به دریافت دستورات صوتی بکنه رو مشخص کنید.
در قسمت Customize offline command words and response words جملاتی که میخوایم به عنوان یه دستور شناخته بشند رو مشخص میکنیم، قسمت behavior برای این هست که بعدا داخل کد بتونیم مشخص کنیم برای هر دستور چه کاری انجام بده، قسمت command word هم متن دستور ما هست، البته میتونیم برای هر دستور چند جمله مختلف مشخص کنیم که همه اونها یک کار رو انجام بدند، اینکار با اضافه کردن ” | ” بین جملات انجام میشه.
در قسمت Wake-up-free command words میتونید یکسری دستورات رو مشخص کنید که نیازی به wake up نداشته باشند و خود دستور رو هر موقع گفتید عمل کنه.
در قسمت boot broadcast هم میتونیم یک جمله رو مشخص کنیم که تا ماژول روشن شد بگه.
حالا دکمه make new version رو میزنیم و بعد از اون دکمه build sdk رو میزنیم و بعد چند دقیقه میتونیم sdk رو دانلود کنیم.
کامپایل SDK
برای کامپایل sdk لازمه که از لینوکس استفاده کنید. من از ubuntu18.04 استفاده میکنم
اول از همه این پکیج ها رو نصب میکنیم.
1 2 3 | sudo apt-get install python sudo apt-get install lame sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 lib32bz2-1.0 |
اگر دستور آخر به ارور خورد از این دستور استفاده کنید.
1 | sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 libbz2-1.0:i386 |
بعد از اون باید فایل های این ریپازیتوری رو دانلود کنیم و در پوشه /opt/Andestech بریزیم که با این دستور انجام میشه.
1 | sudo git clone https://gitee.com/seahi007/andestech.git /opt/Andestech |
حالا فایل sdk رو که از سایت دانلود کردیم توسط یک ادیتور باز میکنیم.
بعد از اون باید فایل hb_auto_gpio.c رو که در مسیر uni_hb_m_solution/unione_lite_app_hb_m/user/src/examples هست به صورت زیر تغییر بدیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include "user_config.h" #include "user_event.h" #include "user_gpio.h" #include "user_player.h" #include "user_pwm.h" #include "user_timer.h" #include "user_uart.h" #define TAG "auto_gpio" #define UART_SEND_MAX 16 typedef struct { char data[UART_SEND_MAX]; int len; } uart_data_t; const uart_data_t g_uart_buf[] = {}; static void _custom_setting_cb(USER_EVENT_TYPE event, user_event_context_t *context) { event_custom_setting_t *setting = NULL; if (context) { setting = &context->custom_setting; LOGT(TAG, "user command: %s", setting->cmd); if (0 == uni_strcmp(setting->cmd, "fadeIn")) { int i; for ( i = 0; i <= 100; i++){ user_pwm_change_duty(PWM_NUM_1_B2, i); uni_msleep(10); } }else if (0 == uni_strcmp(setting->cmd, "fadeOut")){ int i; for ( i = 100; i >= 0; i--){ user_pwm_change_duty(PWM_NUM_1_B2, i); uni_msleep(10); } }else if (0 == uni_strcmp(setting->cmd, "turnOn")){ user_gpio_set_value(GPIO_NUM_B3, 1); }else if (0 == uni_strcmp(setting->cmd, "turnOff")){ user_gpio_set_value(GPIO_NUM_B3, 0); } else{ LOGT(TAG, "Unconcerned command: %s", setting->cmd); } user_player_reply_list_random(setting->reply_files); } } static void _register_event_callback(void) { user_event_subscribe_event(USER_CUSTOM_SETTING, _custom_setting_cb); } int hb_auto_gpio(void) { user_gpio_init(); user_gpio_set_mode(GPIO_NUM_A25, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_A25, 0); user_gpio_set_mode(GPIO_NUM_A26, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_A26, 0); user_gpio_set_mode(GPIO_NUM_A27, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_A27, 0); user_gpio_set_mode(GPIO_NUM_A28, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_A28, 0); user_gpio_set_mode(GPIO_NUM_B6, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_B6, 0); user_gpio_set_mode(GPIO_NUM_B7, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_B7, 0); user_gpio_set_mode(GPIO_NUM_B3, GPIO_MODE_OUT); user_gpio_set_value(GPIO_NUM_B3, 0); user_pwm_init(PWM_NUM_1_B2, 22000, true); user_pwm_start(PWM_NUM_1_B2, 0); _register_event_callback(); return 0; } |
بخش اصلی که ما تغییر دادیم تابع _custom_setting_cb هست که در اون میگیم اگر هر کدوم از دستورات دریافت شد چه کاری انجام بده.
بعد از اون به پوشه /uni_hb_m_solution/unione_lite_app_hb_m میریم و این دستور رو میزنیم تا پروژه کامپایل بشه.
1 | ./build.sh update |
فایل خروجی ما در این مسیر قابل دسترسی هست.
1 | uni_hb_m_solution/unione_lite_app_hb_m/output/uni_app_debug_update.bin |
حالا برای پروگرام باید از ویندوز و نرم افزار UART burning tool استفاده کنیم.
بعد از انتخاب فریمور، با زدن اون دکمه چینی پایین سمت راست صفحه منتظر ریست شدن ماژول میشه و بعد که ماژول رو بهصورت دستی ریست کردیم فریمور شروع به آپلود شدن میکنه.
این هم از فیلم تست ماژول
سلام . من این ماژول رو تهیه کردم و باهاش دارم کار میکنم . یه مشکلی که هست یه حالت دیپ اسلیپ طور داره .یعنی وقتی میره توی اسلیپ اگر مثلا 24 ساعت صدا زده نشه بعدش باید چندین بار صداش بزنی تا بیدار بشه و خیلی سخت بیدار میشه. ولی وقتی بیدار میشه دیگه راه میوفته حتی بعد از همه دستورات دوباره اسلیپ بشه و سریع صداش کنید دوباره زود با همون فرمان اول بیدار میشه ولی باز تایم بگذره مثلا چند ساعت به راحتی بیدار نمیشه و اذیت میکنه. توی تنظیمات هم حالت های مختلف رو تست کردم اون قسمت سنسیویتی روی حالت های لو و میدل و های گذاشتم و تست کردم و تست های دیگه ولی هیچ کدوم مشکل رو حل نکرد. شما هم همین مشکل رو دارید ؟ راه حلی داره درست بشه ؟
سلام. من به شخصه طولانی مدت تستش نکردم. اما به احتمال اگر روش وقت بزارید و کد های خود sdk رو هم بررسی و اصلاح بکنید میتونید به صورت stable ازش استفاده کنید.
سلام . ممنون از سایت و توضیحات خوبتون. من سفارش خرید این ماژول رو زدم و تا قبل از رسیدن به دستم خواستم یه فریم ویر بسازم.
چندتا مساله و مشکل داشتم. مورد اول اینکه با 150تا دستور شروع کردم و ساخت sdk خراب شد و جواب نداد. کم کم دستورات رو کم کردم تا با 45 فرمان بلاخره جواب داد و sdk ساخته شد. معیار تعداد دستورات ، تعداد کلمه های استفاده شدس؟
مورد بعدی اینکه ظاهرا سایت اپدیت شده خودش هم sdk میسازه هم فریم ویر با فرمت bin .همین فریم ویر ساخته شده رو میشه استفاده کرد ؟ 4عدد فایل bin ساخته شده با اسم های زیر:
uni_app_debug.bin
uni_app_debug_update.bin
uni_app_release.bin
uni_app_release_update.bin
کدوم فایل رو باید بریزیم روی ماژول؟
از طرفی این فایل خودش هر دستور رو از طریق پورت سریال ارسال میکنه یا باید خودمون حتما وارد کد بشیم و تغییرات لازم رو بدیم ؟
ممنون
سلام. خواهش میکنم. فکر نمیکنم تعداد کلمه باشه، توی خود سایتش گفته 150 تا دستور.
همونطور که توی مطلب هم اشاره شده، باید این فایل رو بریزید: uni_app_debug_update.bin
باید توی کد بگید که اگه لازمه چیزی ارسال کنه.
سلام چطور میتونم باهاش با پورت سریال اردویینو ارتباط برقرار کرد؟
سلام. مثل هر ماژول دیگه ای.
این ماژول هم یک پورت سریال داره که میتونید روی اون دیتا بفرستید و بگیرید
با سلام و درود. من این ماژول را بدون برد توسعه خریداری کردم. پایه ربست این ماژول کدامه و چطوری ریست میشه؟
سلام
داخل این داکیومنت شماتیک کیت هست و میتونید ازش کمک بگیرید
https://docs.ai-thinker.com/_media/vc-02-kit_specification_v1.0.0.pdf
سلام اموزش عالیه یه پروژه دارم میسازم به یه همچین چیزی نیاز داشتم.فقط اینکه از کجا خریداریش کنم سرچ میکنم سایتا ندارن
سلام
همونطور که انتهای مطلب اشاره شده ، از فروشگاه امبددتک میتونید تهیه کنید
https://embeddedtech.ir/product-tag/vc-02/
سلام برای ساخت حساب کاربری شماره موبایل وارد میکنم میگه فرمت اشتباه هست ایمیل هم وارد میکنم همین میگه میشه بیشتر توضیح دهید چجوری حساب کاربری درست کنیم
سلام
مثل اینکه با بعضی اینترنت ها ایمیل رو قبول میکنه و با بعضی نه ! البته این مشکل فقط برای ساخت حساب هست
با اینترنت ثابت یا همراه دیگه هم تست کنید. اگر نشد به من ایمیل بدید تا تلگرام پیام بدید تا براتون با ایمیل خودتون اکانت بسازم
سلام خسته نباشید
چطوری میشه از طریق پورت سریال با آردوینو ارتباط برقرار کرد؟
سلام کلا خود ماژول چند تا خروجی داره برای کنترل وسایل؟
امکانش هست که با اتصال ماژول به اردوینو از طریق پایه های سریال بشه خروجی های بیشتری را کنترل کرد ؟ چگونه ؟
و اینکه برای فعال کردن و خاموش کردن یکی از خروجی های ماژول چند تا دستور داره ؟
یا فقط یه دستور داره برای کنترل هر خروجی ؟
سلام
خود ماژول 10 پایه gpio داره
همچنین پورت سریال داره که میشه از طریق اون با آردوینو ارتباط گرفت
نحوه راه اندازی gpio ها در همین آموزش گفته شده و کد اون رو میتونید بررسی کنید
بله هیچ پارامتری رو هم وارد نمیکنم بازم fail میشه با قند شکن هم امتحان کردم نشد به شرکتشونم ایمیل زدم جواب ندادن
سلام من هرچی داخل سایتش build sdk میکنم بعد چند دیقه build fail میشه راهکارش چیه؟
سلام
باید اطلاعات بیشتری بدید تا بشه کمک کرد
برای دفعه اول هیچ پارامتری رو توی سایت تنظیم نکنید و build بزنید و ببینید آیا باز هم fail میشه ؟
سلام
ممنون از پروژه ی جالبتون
برای انجام این پروژه باید زبان برنامه نویسی بلد باشی؟
اگر جواب بله هست، چه زبان برنامه نویسی؟
سلام
بله باید به زبان c مسلط باشید
سلام در قسمت other configuration یکجایش تایم اوت گفته بزارید که مثلا اگر کاربر ۱۰ ثانیه صحبت نکرد پیغامی رو بگه …. من بعد از پخش این پیام دیگه کار نمیکنه و مجبورم خاموش و روشن کنم راهکار چیه بخواهیم این اتفاق نیفته و اگر کسی چیزی نگه بازم مثل روال کار خودش رو کنه
سلام. من تست کردم مشکلی نداشته.
بررسی کنید که فریمور درست رو روی ماژول ریخته باشید
سلام ، موقع ثبت نام توی سایت شماره تلفن لازم داره ، باید از شماره مجازی برای ثبت استفاده کرد ؟ چه کشور هایی رو قبول میکنه ؟
سلام
اصلا نیازی به شماره تلفن نیست
اون بخش verifaction code مال ایمیل هست و کد رو براتون ایمیل میکنه
اشتباه نوشته phone verifaction code
مگه نباید از این لینک برای ساخت حساب اقدام کنیم ؟
http://voice.ai-thinker.com/#/register
یا من جای اشتباه میرم
سلام موقع نصب پکیج هایی که گفتید ارور unable to locate package lib32ncurses5 رو به من میده چیکار میتونم بکنم
سلام از چه توزیع لینوکس و چه نسخه ای استفاده میکنید ؟
ubuntu-22.04.2
مشکل از نسخه لینوکس هست
پیشنهاد میکنم نهایتا از نسخه ubuntu 18.04 استفاده کنید
یعنی یا 18.04 یا 16
چون بعد از این مشکل ممکنه به مشکلات دیگه ای هم بر بخورید
سلام در قسمت other configuration یکجایش تایم اوت گفته بزارید که مثلا اگر کاربر ۱۰ ثانیه صحبت نکرد پیغامی رو بگه ….
من بعد از پخش این پیام دیگه کار نمیکنه و مجبورم خاموش و روشن کنم
راهکار چیه بخواهیم این اتفاق نیفته
و اگر کسی چیزی نگه بازم مثل روال کار خودش رو کنه
سلام. ماژول نمیتونه همیشه توی حالت فعال باشه و یه time out داره . میتونید بسته به نیاز ماژول رو wake up کنید که این کار میتونه با دستورات صوتی یا با کمک gpio ها باشه
سلام!
آیا امکان تشخیص گفتار فارسی رو هم داره؟
یا فکر میکنید آیا میشه اضافهاش کرد؟
سلام
امکانش رو نداره و قابل اضافه کردن هم نیست
سلام
این ماژول رو از کجا تهیه کردید ؟
همونطور که در انتهای مطلب اشاره شده ، از فروشگاه امبددتک میتونید تهیه کنید