OpenVINO ಹ್ಯಾಕಥಾನ್: ರಾಸ್ಪ್ಬೆರಿ ಪೈನಲ್ಲಿ ಧ್ವನಿ ಮತ್ತು ಭಾವನೆಗಳನ್ನು ಗುರುತಿಸುವುದು
ನವೆಂಬರ್ 30 - ಡಿಸೆಂಬರ್ 1 ರಂದು ನಿಜ್ನಿ ನವ್ಗೊರೊಡ್ನಲ್ಲಿ ನಡೆಯಿತು ಓಪನ್ವಿನೋ ಹ್ಯಾಕಥಾನ್. Intel OpenVINO ಟೂಲ್ಕಿಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಉತ್ಪನ್ನ ಪರಿಹಾರದ ಮೂಲಮಾದರಿಯನ್ನು ರಚಿಸಲು ಭಾಗವಹಿಸುವವರನ್ನು ಕೇಳಲಾಯಿತು. ಕಾರ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡುವಾಗ ಮಾರ್ಗದರ್ಶನ ಮಾಡಬಹುದಾದ ಅಂದಾಜು ವಿಷಯಗಳ ಪಟ್ಟಿಯನ್ನು ಸಂಘಟಕರು ಪ್ರಸ್ತಾಪಿಸಿದರು, ಆದರೆ ಅಂತಿಮ ನಿರ್ಧಾರವು ತಂಡಗಳೊಂದಿಗೆ ಉಳಿಯಿತು. ಇದರ ಜೊತೆಗೆ, ಉತ್ಪನ್ನದಲ್ಲಿ ಸೇರಿಸದ ಮಾದರಿಗಳ ಬಳಕೆಯನ್ನು ಪ್ರೋತ್ಸಾಹಿಸಲಾಯಿತು.
ಈ ಲೇಖನದಲ್ಲಿ ನಾವು ನಮ್ಮ ಉತ್ಪನ್ನದ ಮೂಲಮಾದರಿಯನ್ನು ಹೇಗೆ ರಚಿಸಿದ್ದೇವೆ ಎಂಬುದರ ಕುರಿತು ನಾವು ನಿಮಗೆ ಹೇಳುತ್ತೇವೆ, ಅದರೊಂದಿಗೆ ನಾವು ಅಂತಿಮವಾಗಿ ಮೊದಲ ಸ್ಥಾನವನ್ನು ಪಡೆದುಕೊಂಡಿದ್ದೇವೆ.
ಹ್ಯಾಕಥಾನ್ನಲ್ಲಿ 10ಕ್ಕೂ ಹೆಚ್ಚು ತಂಡಗಳು ಭಾಗವಹಿಸಿದ್ದವು. ಅವರಲ್ಲಿ ಕೆಲವರು ಬೇರೆ ಪ್ರದೇಶಗಳಿಂದ ಬಂದಿರುವುದು ಸಂತಸ ತಂದಿದೆ. ಹ್ಯಾಕಥಾನ್ನ ಸ್ಥಳವು "ಕ್ರೆಮ್ಲಿನ್ಸ್ಕಿ ಆನ್ ಪೊಚೈನ್" ಸಂಕೀರ್ಣವಾಗಿತ್ತು, ಅಲ್ಲಿ ನಿಜ್ನಿ ನವ್ಗೊರೊಡ್ನ ಪುರಾತನ ಛಾಯಾಚಿತ್ರಗಳನ್ನು ಮುತ್ತಣದವರಿಗೂ ನೇತುಹಾಕಲಾಗಿತ್ತು! (ಈ ಸಮಯದಲ್ಲಿ ಇಂಟೆಲ್ನ ಕೇಂದ್ರ ಕಚೇರಿ ನಿಜ್ನಿ ನವ್ಗೊರೊಡ್ನಲ್ಲಿದೆ ಎಂದು ನಾನು ನಿಮಗೆ ನೆನಪಿಸುತ್ತೇನೆ). ಭಾಗವಹಿಸುವವರಿಗೆ ಕೋಡ್ ಬರೆಯಲು 26 ಗಂಟೆಗಳ ಕಾಲಾವಕಾಶ ನೀಡಲಾಯಿತು ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ಅವರು ತಮ್ಮ ಪರಿಹಾರವನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಬೇಕಾಗಿತ್ತು. ಯೋಜಿತ ಎಲ್ಲವನ್ನೂ ವಾಸ್ತವವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಪ್ರಸ್ತುತಿಯಲ್ಲಿ ಆಲೋಚನೆಗಳು ಉಳಿಯುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಡೆಮೊ ಅಧಿವೇಶನದ ಉಪಸ್ಥಿತಿಯು ಒಂದು ಪ್ರತ್ಯೇಕ ಪ್ರಯೋಜನವಾಗಿದೆ. ವ್ಯಾಪಾರ, ತಿಂಡಿ, ತಿನಿಸು, ಎಲ್ಲವೂ ಇತ್ತು!
ಇದರ ಜೊತೆಗೆ, ಇಂಟೆಲ್ ಐಚ್ಛಿಕವಾಗಿ ಕ್ಯಾಮೆರಾಗಳನ್ನು ಒದಗಿಸಿದೆ, ರಾಸ್ಪ್ಬೆರಿ ಪಿಐ, ನ್ಯೂರಲ್ ಕಂಪ್ಯೂಟ್ ಸ್ಟಿಕ್ 2.
ಕಾರ್ಯ ಆಯ್ಕೆ
ಉಚಿತ-ರೂಪದ ಹ್ಯಾಕಥಾನ್ಗೆ ತಯಾರಿ ಮಾಡುವ ಅತ್ಯಂತ ಕಷ್ಟಕರವಾದ ಭಾಗವೆಂದರೆ ಸವಾಲನ್ನು ಆರಿಸಿಕೊಳ್ಳುವುದು. ಇದು ಹೆಚ್ಚು ಸ್ವಾಗತಾರ್ಹ ಎಂದು ಪ್ರಕಟಣೆಯು ಹೇಳಿದ್ದರಿಂದ ನಾವು ಉತ್ಪನ್ನದಲ್ಲಿ ಇನ್ನೂ ಇಲ್ಲದಿರುವದನ್ನು ತಕ್ಷಣವೇ ತರಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ.
ವಿಶ್ಲೇಷಿಸಿದ ನಂತರ ಮಾದರಿಗಳು, ಪ್ರಸ್ತುತ ಬಿಡುಗಡೆಯಲ್ಲಿ ಉತ್ಪನ್ನದಲ್ಲಿ ಸೇರಿಸಲಾದ, ಅವುಗಳಲ್ಲಿ ಹೆಚ್ಚಿನವು ವಿವಿಧ ಕಂಪ್ಯೂಟರ್ ದೃಷ್ಟಿ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತವೆ ಎಂದು ನಾವು ತೀರ್ಮಾನಕ್ಕೆ ಬರುತ್ತೇವೆ. ಇದಲ್ಲದೆ, OpenVINO ಬಳಸಿ ಪರಿಹರಿಸಲಾಗದ ಕಂಪ್ಯೂಟರ್ ದೃಷ್ಟಿ ಕ್ಷೇತ್ರದಲ್ಲಿ ಸಮಸ್ಯೆಯೊಂದಿಗೆ ಬರಲು ತುಂಬಾ ಕಷ್ಟ, ಮತ್ತು ಒಂದನ್ನು ಆವಿಷ್ಕರಿಸಬಹುದಾದರೂ ಸಹ, ಸಾರ್ವಜನಿಕ ಡೊಮೇನ್ನಲ್ಲಿ ಪೂರ್ವ-ತರಬೇತಿ ಪಡೆದ ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟ. ನಾವು ಇನ್ನೊಂದು ದಿಕ್ಕಿನಲ್ಲಿ ಅಗೆಯಲು ನಿರ್ಧರಿಸುತ್ತೇವೆ - ಭಾಷಣ ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆಯ ಕಡೆಗೆ. ಭಾಷಣದಿಂದ ಭಾವನೆಗಳನ್ನು ಗುರುತಿಸುವ ಆಸಕ್ತಿದಾಯಕ ಕಾರ್ಯವನ್ನು ಪರಿಗಣಿಸೋಣ. OpenVINO ಈಗಾಗಲೇ ವ್ಯಕ್ತಿಯ ಮುಖದ ಆಧಾರದ ಮೇಲೆ ಅವರ ಭಾವನೆಗಳನ್ನು ನಿರ್ಧರಿಸುವ ಮಾದರಿಯನ್ನು ಹೊಂದಿದೆ ಎಂದು ಹೇಳಬೇಕು, ಆದರೆ:
ಸಿದ್ಧಾಂತದಲ್ಲಿ, ಧ್ವನಿ ಮತ್ತು ಚಿತ್ರ ಎರಡರಲ್ಲೂ ಕೆಲಸ ಮಾಡುವ ಸಂಯೋಜಿತ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಿದೆ, ಇದು ನಿಖರತೆಯ ಹೆಚ್ಚಳವನ್ನು ನೀಡುತ್ತದೆ.
ಕ್ಯಾಮೆರಾಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಕಿರಿದಾದ ವೀಕ್ಷಣಾ ಕೋನವನ್ನು ಹೊಂದಿರುತ್ತವೆ; ದೊಡ್ಡ ಪ್ರದೇಶವನ್ನು ಕವರ್ ಮಾಡಲು ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಕ್ಯಾಮೆರಾಗಳ ಅಗತ್ಯವಿದೆ; ಧ್ವನಿಯು ಅಂತಹ ಮಿತಿಯನ್ನು ಹೊಂದಿಲ್ಲ.
ಕಲ್ಪನೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸೋಣ: ಚಿಲ್ಲರೆ ವಿಭಾಗದ ಕಲ್ಪನೆಯನ್ನು ಆಧಾರವಾಗಿ ತೆಗೆದುಕೊಳ್ಳೋಣ. ನೀವು ಸ್ಟೋರ್ ಚೆಕ್ಔಟ್ಗಳಲ್ಲಿ ಗ್ರಾಹಕರ ತೃಪ್ತಿಯನ್ನು ಅಳೆಯಬಹುದು. ಗ್ರಾಹಕರಲ್ಲಿ ಒಬ್ಬರು ಸೇವೆಯಲ್ಲಿ ಅತೃಪ್ತರಾಗಿದ್ದರೆ ಮತ್ತು ಅವರ ಧ್ವನಿಯನ್ನು ಹೆಚ್ಚಿಸಲು ಪ್ರಾರಂಭಿಸಿದರೆ, ನೀವು ತಕ್ಷಣ ಸಹಾಯಕ್ಕಾಗಿ ನಿರ್ವಾಹಕರನ್ನು ಕರೆಯಬಹುದು.
ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನಾವು ಮಾನವ ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೇರಿಸಬೇಕಾಗಿದೆ, ಇದು ಗ್ರಾಹಕರಿಂದ ಅಂಗಡಿ ಉದ್ಯೋಗಿಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು ಮತ್ತು ಪ್ರತಿಯೊಬ್ಬ ವ್ಯಕ್ತಿಗೆ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಒದಗಿಸಲು ನಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಅಲ್ಲದೆ, ಹೆಚ್ಚುವರಿಯಾಗಿ, ಅಂಗಡಿಯ ಉದ್ಯೋಗಿಗಳ ನಡವಳಿಕೆಯನ್ನು ಸ್ವತಃ ವಿಶ್ಲೇಷಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ತಂಡದಲ್ಲಿನ ವಾತಾವರಣವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು ಉತ್ತಮವಾಗಿದೆ!
ನಮ್ಮ ಪರಿಹಾರಕ್ಕಾಗಿ ನಾವು ಅವಶ್ಯಕತೆಗಳನ್ನು ರೂಪಿಸುತ್ತೇವೆ:
ಗುರಿ ಸಾಧನದ ಸಣ್ಣ ಗಾತ್ರ
ನೈಜ ಸಮಯದ ಕಾರ್ಯಾಚರಣೆ
ಕಡಿಮೆ ಬೆಲೆ
ಸುಲಭ ಸ್ಕೇಲೆಬಿಲಿಟಿ
ಪರಿಣಾಮವಾಗಿ, ನಾವು ರಾಸ್ಪ್ಬೆರಿ ಪೈ 3 ಸಿ ಅನ್ನು ಗುರಿ ಸಾಧನವಾಗಿ ಆಯ್ಕೆ ಮಾಡುತ್ತೇವೆ ಇಂಟೆಲ್ NCS 2.
ಇಲ್ಲಿ NCS ನ ಒಂದು ಪ್ರಮುಖ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಗಮನಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ - ಇದು ಪ್ರಮಾಣಿತ CNN ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಆದರೆ ನೀವು ಅದರ ಮೇಲೆ ಕಸ್ಟಮ್ ಲೇಯರ್ಗಳೊಂದಿಗೆ ಮಾದರಿಯನ್ನು ಚಲಾಯಿಸಬೇಕಾದರೆ, ನಂತರ ಕಡಿಮೆ-ಮಟ್ಟದ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ನಿರೀಕ್ಷಿಸಬಹುದು.
ಮಾಡಲು ಕೇವಲ ಒಂದು ಸಣ್ಣ ವಿಷಯವಿದೆ: ನೀವು ಮೈಕ್ರೊಫೋನ್ ಪಡೆಯಬೇಕು. ಸಾಮಾನ್ಯ USB ಮೈಕ್ರೊಫೋನ್ ಮಾಡುತ್ತದೆ, ಆದರೆ ಇದು RPI ಜೊತೆಗೆ ಉತ್ತಮವಾಗಿ ಕಾಣುವುದಿಲ್ಲ. ಆದರೆ ಇಲ್ಲಿಯೂ ಸಹ ಪರಿಹಾರವು ಅಕ್ಷರಶಃ "ಹತ್ತಿರದಲ್ಲಿದೆ." ಧ್ವನಿಯನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಲು, ಕಿಟ್ನಿಂದ ವಾಯ್ಸ್ ಬಾನೆಟ್ ಬೋರ್ಡ್ ಅನ್ನು ಬಳಸಲು ನಾವು ನಿರ್ಧರಿಸುತ್ತೇವೆ Google AIY ಧ್ವನಿ ಕಿಟ್, ಅದರ ಮೇಲೆ ವೈರ್ಡ್ ಸ್ಟಿರಿಯೊ ಮೈಕ್ರೊಫೋನ್ ಇದೆ.
Raspbian ನಿಂದ ಡೌನ್ಲೋಡ್ ಮಾಡಿ AIY ಯೋಜನೆಗಳ ಭಂಡಾರ ಮತ್ತು ಅದನ್ನು ಫ್ಲ್ಯಾಶ್ ಡ್ರೈವ್ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡಿ, ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಮೈಕ್ರೊಫೋನ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಯೇ ಎಂದು ಪರೀಕ್ಷಿಸಿ (ಇದು 5 ಸೆಕೆಂಡುಗಳಷ್ಟು ಆಡಿಯೊವನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಫೈಲ್ಗೆ ಉಳಿಸುತ್ತದೆ):
arecord -d 5 -r 16000 test.wav
ಮೈಕ್ರೊಫೋನ್ ತುಂಬಾ ಸೂಕ್ಷ್ಮವಾಗಿದೆ ಮತ್ತು ಶಬ್ದವನ್ನು ಚೆನ್ನಾಗಿ ಎತ್ತಿಕೊಳ್ಳುತ್ತದೆ ಎಂದು ನಾನು ತಕ್ಷಣ ಗಮನಿಸಬೇಕು. ಇದನ್ನು ಸರಿಪಡಿಸಲು, ನಾವು alsamixer ಗೆ ಹೋಗೋಣ, ಕ್ಯಾಪ್ಚರ್ ಸಾಧನಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ ಮತ್ತು ಇನ್ಪುಟ್ ಸಿಗ್ನಲ್ ಮಟ್ಟವನ್ನು 50-60% ಗೆ ಕಡಿಮೆ ಮಾಡಿ.
ನಾವು ದೇಹವನ್ನು ಫೈಲ್ನೊಂದಿಗೆ ಮಾರ್ಪಡಿಸುತ್ತೇವೆ ಮತ್ತು ಎಲ್ಲವೂ ಸರಿಹೊಂದುತ್ತದೆ, ನೀವು ಅದನ್ನು ಮುಚ್ಚಳದೊಂದಿಗೆ ಮುಚ್ಚಬಹುದು
ಸೂಚಕ ಬಟನ್ ಸೇರಿಸಲಾಗುತ್ತಿದೆ
AIY ವಾಯ್ಸ್ ಕಿಟ್ ಅನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ತೆಗೆದುಕೊಳ್ಳುವಾಗ, RGB ಬಟನ್ ಇದೆ ಎಂದು ನಾವು ನೆನಪಿಸಿಕೊಳ್ಳುತ್ತೇವೆ, ಅದರ ಬ್ಯಾಕ್ಲೈಟ್ ಅನ್ನು ಸಾಫ್ಟ್ವೇರ್ ಮೂಲಕ ನಿಯಂತ್ರಿಸಬಹುದು. ನಾವು "Google AIY Led" ಗಾಗಿ ಹುಡುಕುತ್ತೇವೆ ಮತ್ತು ದಸ್ತಾವೇಜನ್ನು ಹುಡುಕುತ್ತೇವೆ: https://aiyprojects.readthedocs.io/en/latest/aiy.leds.html
ಗುರುತಿಸಲಾದ ಭಾವನೆಯನ್ನು ಪ್ರದರ್ಶಿಸಲು ಈ ಬಟನ್ ಅನ್ನು ಏಕೆ ಬಳಸಬಾರದು, ನಾವು ಕೇವಲ 7 ತರಗತಿಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ ಮತ್ತು ಬಟನ್ 8 ಬಣ್ಣಗಳನ್ನು ಹೊಂದಿದೆ, ಸಾಕು!
ನಾವು GPIO ಮೂಲಕ ಬಟನ್ ಅನ್ನು ವಾಯ್ಸ್ ಬಾನೆಟ್ಗೆ ಸಂಪರ್ಕಿಸುತ್ತೇವೆ, ಅಗತ್ಯ ಲೈಬ್ರರಿಗಳನ್ನು ಲೋಡ್ ಮಾಡುತ್ತೇವೆ (ಅವುಗಳನ್ನು ಈಗಾಗಲೇ AIY ಯೋಜನೆಗಳಿಂದ ವಿತರಣಾ ಕಿಟ್ನಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
ಪ್ರತಿ ಭಾವನೆಯು RGB ಟುಪಲ್ ಮತ್ತು ವರ್ಗದ aiy.leds.Leds ನ ವಸ್ತುವಿನ ರೂಪದಲ್ಲಿ ಅನುಗುಣವಾದ ಬಣ್ಣವನ್ನು ಹೊಂದಿರುವ ಒಂದು ಡಿಕ್ಟ್ ಅನ್ನು ರಚಿಸೋಣ, ಅದರ ಮೂಲಕ ನಾವು ಬಣ್ಣವನ್ನು ನವೀಕರಿಸುತ್ತೇವೆ:
ಶಬ್ದವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಮತ್ತು ಧ್ವನಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ನಾವು ಮೈಕ್ರೊಫೋನ್ ಮತ್ತು webrtcvad ನಿಂದ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಸೆರೆಹಿಡಿಯಲು pyaudio ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ನಾವು ಕ್ಯೂ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ, ಅದಕ್ಕೆ ನಾವು ಅಸಮಕಾಲಿಕವಾಗಿ ಧ್ವನಿ ಉದ್ಧರಣಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ ಮತ್ತು ತೆಗೆದುಹಾಕುತ್ತೇವೆ.
ಸರಬರಾಜು ಮಾಡಿದ ತುಣುಕಿನ ಗಾತ್ರದ ಮೇಲೆ webrtcvad ಮಿತಿಯನ್ನು ಹೊಂದಿರುವುದರಿಂದ - ಇದು 10/20/30ms ಗೆ ಸಮನಾಗಿರಬೇಕು ಮತ್ತು ಭಾವನೆಗಳನ್ನು ಗುರುತಿಸಲು ಮಾದರಿಯ ತರಬೇತಿಯನ್ನು (ನಾವು ನಂತರ ಕಲಿಯುತ್ತೇವೆ) 48kHz ಡೇಟಾಸೆಟ್ನಲ್ಲಿ ನಡೆಸುತ್ತೇವೆ, ನಾವು 48000×20ms/1000×1(ಮೊನೊ)=960 ಬೈಟ್ಗಳ ಗಾತ್ರದ ತುಣುಕುಗಳನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ. Webrtcvad ಈ ಪ್ರತಿಯೊಂದು ಭಾಗಗಳಿಗೆ ಸರಿ/ತಪ್ಪು ಎಂದು ಹಿಂತಿರುಗಿಸುತ್ತದೆ, ಇದು ಚಂಕ್ನಲ್ಲಿ ಮತದ ಉಪಸ್ಥಿತಿ ಅಥವಾ ಅನುಪಸ್ಥಿತಿಗೆ ಅನುರೂಪವಾಗಿದೆ.
ಕೆಳಗಿನ ತರ್ಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸೋಣ:
ನಾವು ಪಟ್ಟಿಗೆ ಮತ ಇರುವ ಭಾಗಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ; ಯಾವುದೇ ಮತವಿಲ್ಲದಿದ್ದರೆ, ನಾವು ಖಾಲಿ ತುಂಡುಗಳ ಕೌಂಟರ್ ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತೇವೆ.
ಖಾಲಿ ತುಂಡುಗಳ ಕೌಂಟರ್ >=30 (600 ms) ಆಗಿದ್ದರೆ, ನಾವು ಸಂಗ್ರಹವಾದ ತುಂಡುಗಳ ಪಟ್ಟಿಯ ಗಾತ್ರವನ್ನು ನೋಡುತ್ತೇವೆ; ಅದು > 250 ಆಗಿದ್ದರೆ, ನಾವು ಅದನ್ನು ಸರದಿಯಲ್ಲಿ ಸೇರಿಸುತ್ತೇವೆ; ಇಲ್ಲದಿದ್ದರೆ, ನಾವು ಉದ್ದವನ್ನು ಪರಿಗಣಿಸುತ್ತೇವೆ ಸ್ಪೀಕರ್ ಅನ್ನು ಗುರುತಿಸಲು ಅದನ್ನು ಮಾದರಿಗೆ ಫೀಡ್ ಮಾಡಲು ದಾಖಲೆಯು ಸಾಕಾಗುವುದಿಲ್ಲ.
ಖಾಲಿ ತುಂಡುಗಳ ಕೌಂಟರ್ ಇನ್ನೂ < 30 ಆಗಿದ್ದರೆ ಮತ್ತು ಸಂಗ್ರಹವಾದ ತುಂಡುಗಳ ಪಟ್ಟಿಯ ಗಾತ್ರವು 300 ಕ್ಕಿಂತ ಹೆಚ್ಚಿದ್ದರೆ, ಹೆಚ್ಚು ನಿಖರವಾದ ಭವಿಷ್ಯಕ್ಕಾಗಿ ನಾವು ತುಣುಕನ್ನು ಸರದಿಯಲ್ಲಿ ಸೇರಿಸುತ್ತೇವೆ. (ಏಕೆಂದರೆ ಭಾವನೆಗಳು ಕಾಲಾನಂತರದಲ್ಲಿ ಬದಲಾಗುತ್ತವೆ)
def to_queue(frames):
d = np.frombuffer(b''.join(frames), dtype=np.int16)
return d
framesQueue = queue.Queue()
def framesThreadBody():
CHUNK = 960
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
p = pyaudio.PyAudio()
vad = webrtcvad.Vad()
vad.set_mode(2)
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
false_counter = 0
audio_frame = []
while process:
data = stream.read(CHUNK)
if not vad.is_speech(data, RATE):
false_counter += 1
if false_counter >= 30:
if len(audio_frame) > 250:
framesQueue.put(to_queue(audio_frame,timestamp_start))
audio_frame = []
false_counter = 0
if vad.is_speech(data, RATE):
false_counter = 0
audio_frame.append(data)
if len(audio_frame) > 300:
framesQueue.put(to_queue(audio_frame,timestamp_start))
audio_frame = []
ಸಾರ್ವಜನಿಕ ಡೊಮೇನ್ನಲ್ಲಿ ಪೂರ್ವ-ತರಬೇತಿ ಪಡೆದ ಮಾದರಿಗಳನ್ನು ಹುಡುಕುವ ಸಮಯ ಇದು, ಗಿಥಬ್, ಗೂಗಲ್ಗೆ ಹೋಗಿ, ಆದರೆ ಬಳಸಿದ ವಾಸ್ತುಶಿಲ್ಪದ ಮೇಲೆ ನಮಗೆ ಮಿತಿ ಇದೆ ಎಂಬುದನ್ನು ನೆನಪಿಡಿ. ಇದು ಕಷ್ಟಕರವಾದ ಭಾಗವಾಗಿದೆ, ಏಕೆಂದರೆ ನಿಮ್ಮ ಇನ್ಪುಟ್ ಡೇಟಾದಲ್ಲಿ ನೀವು ಮಾದರಿಗಳನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು ಮತ್ತು ಹೆಚ್ಚುವರಿಯಾಗಿ, ಅವುಗಳನ್ನು OpenVINO ನ ಆಂತರಿಕ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಿ - IR (ಮಧ್ಯಂತರ ಪ್ರಾತಿನಿಧ್ಯ). ನಾವು ಗಿಥಬ್ನಿಂದ ಸುಮಾರು 5-7 ವಿಭಿನ್ನ ಪರಿಹಾರಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿದ್ದೇವೆ ಮತ್ತು ಭಾವನೆಗಳನ್ನು ಗುರುತಿಸುವ ಮಾದರಿಯು ತಕ್ಷಣವೇ ಕಾರ್ಯನಿರ್ವಹಿಸಿದರೆ, ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆಯೊಂದಿಗೆ ನಾವು ಹೆಚ್ಚು ಸಮಯ ಕಾಯಬೇಕಾಗಿತ್ತು - ಅವರು ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳನ್ನು ಬಳಸುತ್ತಾರೆ.
ನಾವು ಈ ಕೆಳಗಿನವುಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತೇವೆ:
ಧ್ವನಿಯಿಂದ ಭಾವನೆಗಳು - https://github.com/alexmuhr/Voice_Emotion
ಇದು ಈ ಕೆಳಗಿನ ತತ್ತ್ವದ ಪ್ರಕಾರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: ಆಡಿಯೊವನ್ನು ನಿರ್ದಿಷ್ಟ ಗಾತ್ರದ ಹಾದಿಗಳಾಗಿ ಕತ್ತರಿಸಲಾಗುತ್ತದೆ, ಈ ಪ್ರತಿಯೊಂದು ಭಾಗಕ್ಕೂ ನಾವು ಆಯ್ಕೆ ಮಾಡುತ್ತೇವೆ MFCC ತದನಂತರ ಅವುಗಳನ್ನು CNN ಗೆ ಇನ್ಪುಟ್ ಆಗಿ ಸಲ್ಲಿಸಿ
ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆ - https://github.com/linhdvu14/vggvox-speaker-identification
ಇಲ್ಲಿ, MFCC ಬದಲಿಗೆ, ನಾವು ಸ್ಪೆಕ್ಟ್ರೋಗ್ರಾಮ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತೇವೆ, FFT ನಂತರ ನಾವು ಸಿಎನ್ಎನ್ಗೆ ಸಿಗ್ನಲ್ ಅನ್ನು ನೀಡುತ್ತೇವೆ, ಅಲ್ಲಿ ಔಟ್ಪುಟ್ನಲ್ಲಿ ನಾವು ಧ್ವನಿಯ ವೆಕ್ಟರ್ ಪ್ರಾತಿನಿಧ್ಯವನ್ನು ಪಡೆಯುತ್ತೇವೆ.
ಮುಂದೆ ನಾವು ಸಿದ್ಧಾಂತದಿಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾದರಿಗಳನ್ನು ಪರಿವರ್ತಿಸುವ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತೇವೆ. OpenVINO ಹಲವಾರು ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:
ಓಪನ್ ಮಾಡೆಲ್ ಝೂ, ನಿಮ್ಮ ಉತ್ಪನ್ನದಲ್ಲಿ ಬಳಸಬಹುದಾದ ಮತ್ತು ಸೇರಿಸಬಹುದಾದ ಮಾದರಿಗಳು
ಮಾದರಿ ಆಪ್ಟಿಮ್ಜರ್, ನೀವು ವಿವಿಧ ಫ್ರೇಮ್ವರ್ಕ್ ಫಾರ್ಮ್ಯಾಟ್ಗಳಿಂದ (ಟೆನ್ಸಾರ್ಫ್ಲೋ, ಒಎನ್ಎನ್ಎಕ್ಸ್ ಇತ್ಯಾದಿ) ಮಾದರಿಯನ್ನು ಮಧ್ಯಂತರ ಪ್ರಾತಿನಿಧ್ಯ ಸ್ವರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಲು ಧನ್ಯವಾದಗಳು, ಅದರೊಂದಿಗೆ ನಾವು ಮುಂದೆ ಕೆಲಸ ಮಾಡುತ್ತೇವೆ
ಇಂಟೆಲ್ ಪ್ರೊಸೆಸರ್ಗಳು, ಅಸಂಖ್ಯಾತ ಚಿಪ್ಸ್ ಮತ್ತು ನ್ಯೂರಲ್ ಕಂಪ್ಯೂಟ್ ಸ್ಟಿಕ್ ವೇಗವರ್ಧಕಗಳಲ್ಲಿ ಐಆರ್ ಸ್ವರೂಪದಲ್ಲಿ ಮಾದರಿಗಳನ್ನು ಚಲಾಯಿಸಲು ಇನ್ಫರೆನ್ಸ್ ಎಂಜಿನ್ ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ
OpenCV ಯ ಅತ್ಯಂತ ಪರಿಣಾಮಕಾರಿ ಆವೃತ್ತಿ (ಇನ್ಫರೆನ್ಸ್ ಎಂಜಿನ್ ಬೆಂಬಲದೊಂದಿಗೆ)
IR ಸ್ವರೂಪದಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಮಾದರಿಯನ್ನು ಎರಡು ಫೈಲ್ಗಳಿಂದ ವಿವರಿಸಲಾಗಿದೆ: .xml ಮತ್ತು .bin.
ಮಾದರಿ ಆಪ್ಟಿಮೈಜರ್ ಮೂಲಕ ಈ ಕೆಳಗಿನಂತೆ ಮಾದರಿಗಳನ್ನು ಐಆರ್ ಫಾರ್ಮ್ಯಾಟ್ಗೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ:
--data_type ಮಾದರಿಯು ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಡೇಟಾ ಸ್ವರೂಪವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. FP32, FP16, INT8 ಬೆಂಬಲಿತವಾಗಿದೆ. ಸೂಕ್ತವಾದ ಡೇಟಾ ಪ್ರಕಾರವನ್ನು ಆರಿಸುವುದರಿಂದ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯ ವರ್ಧಕವನ್ನು ನೀಡಬಹುದು. --input_shape ಇನ್ಪುಟ್ ಡೇಟಾದ ಆಯಾಮವನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಬದಲಾಯಿಸುವ ಸಾಮರ್ಥ್ಯವು C++ API ನಲ್ಲಿ ಕಂಡುಬರುತ್ತಿದೆ, ಆದರೆ ನಾವು ಅಷ್ಟು ದೂರವನ್ನು ಅಗೆಯಲಿಲ್ಲ ಮತ್ತು ಅದನ್ನು ಮಾದರಿಗಳಲ್ಲಿ ಒಂದಕ್ಕೆ ಸರಳವಾಗಿ ಸರಿಪಡಿಸಿದ್ದೇವೆ.
ಮುಂದೆ, ಡಿಎನ್ಎನ್ ಮಾಡ್ಯೂಲ್ ಮೂಲಕ ಐಆರ್ ಸ್ವರೂಪದಲ್ಲಿ ಈಗಾಗಲೇ ಪರಿವರ್ತಿಸಲಾದ ಮಾದರಿಯನ್ನು ಓಪನ್ಸಿವಿಗೆ ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಅದನ್ನು ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸೋಣ.
import cv2 as cv
emotionsNet = cv.dnn.readNet('emotions_model.bin',
'emotions_model.xml')
emotionsNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
ಈ ಸಂದರ್ಭದಲ್ಲಿ ಕೊನೆಯ ಸಾಲು ನೀವು ನ್ಯೂರಲ್ ಕಂಪ್ಯೂಟ್ ಸ್ಟಿಕ್ಗೆ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮರುನಿರ್ದೇಶಿಸಲು ಅನುಮತಿಸುತ್ತದೆ, ಮೂಲ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಪ್ರೊಸೆಸರ್ನಲ್ಲಿ ನಡೆಸಲಾಗುತ್ತದೆ, ಆದರೆ ರಾಸ್ಪ್ಬೆರಿ ಪೈ ಸಂದರ್ಭದಲ್ಲಿ ಇದು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ, ನಿಮಗೆ ಸ್ಟಿಕ್ ಅಗತ್ಯವಿರುತ್ತದೆ.
ಮುಂದೆ, ತರ್ಕವು ಈ ಕೆಳಗಿನಂತಿರುತ್ತದೆ: ನಾವು ನಮ್ಮ ಆಡಿಯೊವನ್ನು ನಿರ್ದಿಷ್ಟ ಗಾತ್ರದ ವಿಂಡೋಗಳಾಗಿ ವಿಭಜಿಸುತ್ತೇವೆ (ನಮಗೆ ಇದು 0.4 ಸೆ), ನಾವು ಈ ಪ್ರತಿಯೊಂದು ವಿಂಡೋಗಳನ್ನು MFCC ಗೆ ಪರಿವರ್ತಿಸುತ್ತೇವೆ, ಅದನ್ನು ನಾವು ಗ್ರಿಡ್ಗೆ ನೀಡುತ್ತೇವೆ:
emotionsNet.setInput(MFCC_from_window)
result = emotionsNet.forward()
ಮುಂದೆ, ಎಲ್ಲಾ ವಿಂಡೋಗಳಿಗೆ ಸಾಮಾನ್ಯ ವರ್ಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳೋಣ. ಒಂದು ಸರಳ ಪರಿಹಾರ, ಆದರೆ ಹ್ಯಾಕಥಾನ್ಗಾಗಿ ನೀವು ತುಂಬಾ ಅಮೂರ್ತವಾದದ್ದನ್ನು ತರಲು ಅಗತ್ಯವಿಲ್ಲ, ನಿಮಗೆ ಸಮಯವಿದ್ದರೆ ಮಾತ್ರ. ನಮಗೆ ಇನ್ನೂ ಬಹಳಷ್ಟು ಕೆಲಸಗಳಿವೆ, ಆದ್ದರಿಂದ ನಾವು ಮುಂದುವರಿಯೋಣ - ನಾವು ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆಯೊಂದಿಗೆ ವ್ಯವಹರಿಸುತ್ತೇವೆ. ಪೂರ್ವ-ರೆಕಾರ್ಡ್ ಮಾಡಿದ ಧ್ವನಿಗಳ ಸ್ಪೆಕ್ಟ್ರೋಗ್ರಾಮ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ ಕೆಲವು ರೀತಿಯ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಮಾಡುವುದು ಅವಶ್ಯಕ. ಸ್ವಲ್ಪ ಸಮಯ ಉಳಿದಿರುವುದರಿಂದ, ನಾವು ಈ ಸಮಸ್ಯೆಯನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮವಾಗಿ ಪರಿಹರಿಸುತ್ತೇವೆ.
ಅವುಗಳೆಂದರೆ, ಧ್ವನಿ ಉದ್ಧರಣವನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಲು ನಾವು ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ (ಇದು ಮೇಲೆ ವಿವರಿಸಿದ ರೀತಿಯಲ್ಲಿಯೇ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಕೀಬೋರ್ಡ್ನಿಂದ ಅಡ್ಡಿಪಡಿಸಿದಾಗ ಮಾತ್ರ ಅದು ಧ್ವನಿಯನ್ನು ಫೈಲ್ಗೆ ಉಳಿಸುತ್ತದೆ).
ಪ್ರಯತ್ನಿಸೋಣ:
python3 voice_db/record_voice.py test.wav
ನಾವು ಹಲವಾರು ಜನರ ಧ್ವನಿಗಳನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತೇವೆ (ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಮೂರು ತಂಡದ ಸದಸ್ಯರು)
ಮುಂದೆ, ಪ್ರತಿ ಧ್ವನಿಮುದ್ರಿತ ಧ್ವನಿಗೆ ನಾವು ವೇಗದ ಫೋರಿಯರ್ ರೂಪಾಂತರವನ್ನು ನಿರ್ವಹಿಸುತ್ತೇವೆ, ಸ್ಪೆಕ್ಟ್ರೋಗ್ರಾಮ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತೇವೆ ಮತ್ತು ಅದನ್ನು ನಂಬಿ ಅರೇ (.npy) ಆಗಿ ಉಳಿಸುತ್ತೇವೆ:
for file in glob.glob("voice_db/*.wav"):
spec = get_fft_spectrum(file)
np.save(file[:-4] + '.npy', spec)
ಫೈಲ್ನಲ್ಲಿ ಹೆಚ್ಚಿನ ವಿವರಗಳು create_base.py
ಪರಿಣಾಮವಾಗಿ, ನಾವು ಮುಖ್ಯ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರನ್ ಮಾಡಿದಾಗ, ನಾವು ಪ್ರಾರಂಭದಲ್ಲಿಯೇ ಈ ಸ್ಪೆಕ್ಟ್ರೋಗ್ರಾಮ್ಗಳಿಂದ ಎಂಬೆಡಿಂಗ್ಗಳನ್ನು ಪಡೆಯುತ್ತೇವೆ:
for file in glob.glob("voice_db/*.npy"):
spec = np.load(file)
spec = spec.astype('float32')
spec_reshaped = spec.reshape(1, 1, spec.shape[0], spec.shape[1])
srNet.setInput(spec_reshaped)
pred = srNet.forward()
emb = np.squeeze(pred)
ಧ್ವನಿಯ ವಿಭಾಗದಿಂದ ಎಂಬೆಡಿಂಗ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿದ ನಂತರ, ಡೇಟಾಬೇಸ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಧ್ವನಿಗಳಿಗೆ (ಸಣ್ಣ, ಹೆಚ್ಚು) ಕೊಸೈನ್ ದೂರವನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಮೂಲಕ ಅದು ಯಾರಿಗೆ ಸೇರಿದೆ ಎಂಬುದನ್ನು ನಾವು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ - ಡೆಮೊಗಾಗಿ ನಾವು ಮಿತಿಯನ್ನು ಹೊಂದಿಸುತ್ತೇವೆ 0.3 ಗೆ):
ಕೊನೆಯಲ್ಲಿ, ತೀರ್ಮಾನದ ವೇಗವು ವೇಗವಾಗಿದೆ ಮತ್ತು 1-2 ಹೆಚ್ಚಿನ ಮಾದರಿಗಳನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಸಿದೆ ಎಂದು ನಾನು ಗಮನಿಸಲು ಬಯಸುತ್ತೇನೆ (ಮಾದರಿ 7 ಸೆಕೆಂಡುಗಳವರೆಗೆ ಇದು ತೀರ್ಮಾನಕ್ಕೆ 2.5 ತೆಗೆದುಕೊಂಡಿತು). ನಾವು ಇನ್ನು ಮುಂದೆ ಹೊಸ ಮಾದರಿಗಳನ್ನು ಸೇರಿಸಲು ಸಮಯ ಹೊಂದಿಲ್ಲ ಮತ್ತು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ನ ಮೂಲಮಾದರಿಯನ್ನು ಬರೆಯುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಿದ್ದೇವೆ.
ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್
ಒಂದು ಪ್ರಮುಖ ಅಂಶ: ನಾವು ಮನೆಯಿಂದ ನಮ್ಮೊಂದಿಗೆ ರೂಟರ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ ಮತ್ತು ನಮ್ಮ ಸ್ಥಳೀಯ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಹೊಂದಿಸುತ್ತೇವೆ, ಇದು ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸಾಧನ ಮತ್ತು ಲ್ಯಾಪ್ಟಾಪ್ಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಬ್ಯಾಕೆಂಡ್ ವೆಬ್ಸಾಕೆಟ್ ತಂತ್ರಜ್ಞಾನವನ್ನು ಆಧರಿಸಿ (http ಮೂಲಕ tcp ಪ್ರೋಟೋಕಾಲ್) ಮುಂಭಾಗ ಮತ್ತು ರಾಸ್ಪ್ಬೆರಿ ಪೈ ನಡುವಿನ ಅಂತ್ಯದಿಂದ ಕೊನೆಯ ಸಂದೇಶದ ಚಾನಲ್ ಆಗಿದೆ.
ರಾಸ್ಪ್ಬೆರಿಯಿಂದ ಸಂಸ್ಕರಿಸಿದ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯುವುದು ಮೊದಲ ಹಂತವಾಗಿದೆ, ಅಂದರೆ, json ನಲ್ಲಿ ಪ್ಯಾಕ್ ಮಾಡಲಾದ ಪ್ರಿಡಿಕ್ಟರ್ಗಳು, ಅವುಗಳ ಪ್ರಯಾಣದ ಅರ್ಧದಾರಿಯಲ್ಲೇ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಉಳಿಸಲಾಗುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಅವಧಿಗೆ ಬಳಕೆದಾರರ ಭಾವನಾತ್ಮಕ ಹಿನ್ನೆಲೆಯ ಬಗ್ಗೆ ಅಂಕಿಅಂಶಗಳನ್ನು ರಚಿಸಬಹುದು. ಈ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ನಂತರ ಮುಂಭಾಗಕ್ಕೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಇದು ಚಂದಾದಾರಿಕೆಯನ್ನು ಬಳಸುತ್ತದೆ ಮತ್ತು ವೆಬ್ಸಾಕೆಟ್ ಎಂಡ್ಪಾಯಿಂಟ್ನಿಂದ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಪಡೆಯುತ್ತದೆ. ಸಂಪೂರ್ಣ ಬ್ಯಾಕೆಂಡ್ ಕಾರ್ಯವಿಧಾನವನ್ನು ಗೋಲಾಂಗ್ ಭಾಷೆಯಲ್ಲಿ ನಿರ್ಮಿಸಲಾಗಿದೆ; ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಅಸಮಕಾಲಿಕ ಕಾರ್ಯಗಳಿಗೆ ಸೂಕ್ತವಾಗಿರುತ್ತದೆ, ಇದು ಗೊರೌಟಿನ್ಗಳು ಉತ್ತಮವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ.
ಅಂತಿಮ ಬಿಂದುವನ್ನು ಪ್ರವೇಶಿಸುವಾಗ, ಬಳಕೆದಾರನು ನೋಂದಾಯಿಸಲ್ಪಟ್ಟಿದ್ದಾನೆ ಮತ್ತು ರಚನೆಗೆ ಪ್ರವೇಶಿಸಿದನು, ನಂತರ ಅವನ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರ ಮತ್ತು ಸಂದೇಶ ಎರಡನ್ನೂ ಸಾಮಾನ್ಯ ಹಬ್ಗೆ ನಮೂದಿಸಲಾಗಿದೆ, ಇದರಿಂದ ಸಂದೇಶಗಳನ್ನು ಈಗಾಗಲೇ ಮತ್ತಷ್ಟು ಕಳುಹಿಸಲಾಗಿದೆ (ಚಂದಾದಾರರ ಮುಂಭಾಗಕ್ಕೆ), ಮತ್ತು ಬಳಕೆದಾರರು ಸಂಪರ್ಕವನ್ನು (ರಾಸ್ಪ್ಬೆರಿ ಅಥವಾ ಮುಂಭಾಗ) ಮುಚ್ಚಿದರೆ, ಅವನ ಚಂದಾದಾರಿಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಅವನನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ ಕೇಂದ್ರ.
ನಾವು ಹಿಂಭಾಗದಿಂದ ಸಂಪರ್ಕಕ್ಕಾಗಿ ಕಾಯುತ್ತಿದ್ದೇವೆ
ಫ್ರಂಟ್-ಎಂಡ್ ಎನ್ನುವುದು ಅಭಿವೃದ್ಧಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ವೇಗಗೊಳಿಸಲು ಮತ್ತು ಸರಳಗೊಳಿಸಲು ರಿಯಾಕ್ಟ್ ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಬರೆಯಲಾದ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್ನ ಉದ್ದೇಶವು ಬ್ಯಾಕ್-ಎಂಡ್ ಸೈಡ್ನಲ್ಲಿ ಮತ್ತು ನೇರವಾಗಿ ರಾಸ್ಪ್ಬೆರಿ ಪೈನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಅಲ್ಗಾರಿದಮ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಪಡೆದ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದು. ಪುಟವು ರಿಯಾಕ್ಟ್-ರೂಟರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕಾರ್ಯಗತಗೊಳಿಸಿದ ವಿಭಾಗೀಯ ರೂಟಿಂಗ್ ಅನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ಆಸಕ್ತಿಯ ಮುಖ್ಯ ಪುಟವು ಮುಖ್ಯ ಪುಟವಾಗಿದೆ, ಅಲ್ಲಿ ವೆಬ್ಸಾಕೆಟ್ ತಂತ್ರಜ್ಞಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಸರ್ವರ್ನಿಂದ ನೈಜ ಸಮಯದಲ್ಲಿ ಡೇಟಾದ ನಿರಂತರ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಸ್ವೀಕರಿಸಲಾಗುತ್ತದೆ. ರಾಸ್ಪ್ಬೆರಿ ಪೈ ಧ್ವನಿಯನ್ನು ಪತ್ತೆ ಮಾಡುತ್ತದೆ, ಅದು ನೋಂದಾಯಿತ ಡೇಟಾಬೇಸ್ನಿಂದ ನಿರ್ದಿಷ್ಟ ವ್ಯಕ್ತಿಗೆ ಸೇರಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ ಮತ್ತು ಕ್ಲೈಂಟ್ಗೆ ಸಂಭವನೀಯತೆಯ ಪಟ್ಟಿಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ಕ್ಲೈಂಟ್ ಇತ್ತೀಚಿನ ಸಂಬಂಧಿತ ಡೇಟಾವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ, ಮೈಕ್ರೊಫೋನ್ನಲ್ಲಿ ಹೆಚ್ಚಾಗಿ ಮಾತನಾಡಿದ ವ್ಯಕ್ತಿಯ ಅವತಾರವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ, ಜೊತೆಗೆ ಅವನು ಪದಗಳನ್ನು ಉಚ್ಚರಿಸುವ ಭಾವನೆಯನ್ನು ತೋರಿಸುತ್ತದೆ.
ನವೀಕರಿಸಿದ ಮುನ್ನೋಟಗಳೊಂದಿಗೆ ಮುಖಪುಟ
ತೀರ್ಮಾನಕ್ಕೆ
ಯೋಜಿಸಿದಂತೆ ಎಲ್ಲವನ್ನೂ ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ನಮಗೆ ಸಮಯವಿಲ್ಲ, ಆದ್ದರಿಂದ ಮುಖ್ಯ ಭರವಸೆ ಡೆಮೊದಲ್ಲಿದೆ, ಎಲ್ಲವೂ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಪ್ರಸ್ತುತಿಯಲ್ಲಿ ಅವರು ಎಲ್ಲವೂ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತಾರೆ, ಅವರು ಯಾವ ಮಾದರಿಗಳನ್ನು ತೆಗೆದುಕೊಂಡರು, ಅವರು ಎದುರಿಸಿದ ಸಮಸ್ಯೆಗಳನ್ನು ಕುರಿತು ಮಾತನಾಡಿದರು. ಮುಂದಿನದು ಡೆಮೊ ಭಾಗವಾಗಿತ್ತು - ತಜ್ಞರು ಯಾದೃಚ್ಛಿಕ ಕ್ರಮದಲ್ಲಿ ಕೋಣೆಯ ಸುತ್ತಲೂ ನಡೆದರು ಮತ್ತು ಕೆಲಸದ ಮೂಲಮಾದರಿಯನ್ನು ನೋಡಲು ಪ್ರತಿ ತಂಡವನ್ನು ಸಂಪರ್ಕಿಸಿದರು. ಅವರು ನಮಗೂ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಿದರು, ಪ್ರತಿಯೊಬ್ಬರೂ ತಮ್ಮ ಭಾಗಕ್ಕೆ ಉತ್ತರಿಸಿದರು, ಅವರು ಲ್ಯಾಪ್ಟಾಪ್ನಲ್ಲಿ ವೆಬ್ ಅನ್ನು ತೊರೆದರು ಮತ್ತು ಎಲ್ಲವೂ ನಿಜವಾಗಿಯೂ ನಿರೀಕ್ಷೆಯಂತೆ ಕೆಲಸ ಮಾಡಿದೆ.
ನಮ್ಮ ಪರಿಹಾರದ ಒಟ್ಟು ವೆಚ್ಚ $150 ಎಂದು ನಾನು ಗಮನಿಸುತ್ತೇನೆ:
ರಾಸ್ಪ್ಬೆರಿ ಪೈ 3 ~ $35
Google AIY ವಾಯ್ಸ್ ಬಾನೆಟ್ (ನೀವು ಧ್ವನಿವರ್ಧಕ ಶುಲ್ಕವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು) ~ 15$
ಇಂಟೆಲ್ NCS 2 ~ 100$
ಸುಧಾರಿಸುವುದು ಹೇಗೆ:
ಕ್ಲೈಂಟ್ನಿಂದ ನೋಂದಣಿ ಬಳಸಿ - ಯಾದೃಚ್ಛಿಕವಾಗಿ ರಚಿಸಲಾದ ಪಠ್ಯವನ್ನು ಓದಲು ಕೇಳಿ
ಇನ್ನೂ ಕೆಲವು ಮಾದರಿಗಳನ್ನು ಸೇರಿಸಿ: ನೀವು ಲಿಂಗ ಮತ್ತು ವಯಸ್ಸನ್ನು ಧ್ವನಿಯ ಮೂಲಕ ನಿರ್ಧರಿಸಬಹುದು
ಏಕಕಾಲದಲ್ಲಿ ಧ್ವನಿಸುವ ಧ್ವನಿಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸಿ (ಡೈರೈಸೇಶನ್)
ಕೊನೆಯಲ್ಲಿ, ಸಂಘಟಕರು ಮತ್ತು ಭಾಗವಹಿಸುವವರಿಗೆ ನಾನು ಧನ್ಯವಾದ ಹೇಳಲು ಬಯಸುತ್ತೇನೆ. ಇತರ ತಂಡಗಳ ಯೋಜನೆಗಳಲ್ಲಿ, ಉಚಿತ ಪಾರ್ಕಿಂಗ್ ಸ್ಥಳಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಪರಿಹಾರವನ್ನು ನಾವು ವೈಯಕ್ತಿಕವಾಗಿ ಇಷ್ಟಪಟ್ಟಿದ್ದೇವೆ. ನಮಗೆ, ಇದು ಉತ್ಪನ್ನ ಮತ್ತು ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಮುಳುಗುವಿಕೆಯ ಹುಚ್ಚುಚ್ಚಾಗಿ ತಂಪಾದ ಅನುಭವವಾಗಿದೆ. AI ವಿಷಯಗಳು ಸೇರಿದಂತೆ ಪ್ರದೇಶಗಳಲ್ಲಿ ಹೆಚ್ಚು ಹೆಚ್ಚು ಆಸಕ್ತಿದಾಯಕ ಘಟನೆಗಳು ನಡೆಯುತ್ತವೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ.