ዝርዝር ሁኔታ:
- ደረጃ 1 አናኮንዳ ጫን
- ደረጃ 2: ክፍት CV ጥቅል ያውርዱ
- ደረጃ 3 - የአካባቢ ተለዋዋጮችን ያዘጋጁ
- ደረጃ 4: ለማረጋገጥ ሙከራ
- ደረጃ 5: ፊት ለይቶ ለማወቅ ኮድ ያድርጉ
- ደረጃ 6 የውሂብ ቅንብር ለመፍጠር ኮድ ያዘጋጁ
- ደረጃ 7 መታወቂያውን ለማሠልጠን ኮድ ያዘጋጁ
- ደረጃ 8 ፊቶችን እና ውጤትን ለመለየት ኮድ ያድርጉ
ቪዲዮ: የፊት ለይቶ ማወቅ+እውቅና 8 ደረጃዎች (ከስዕሎች ጋር)
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:33
ይህ በ OpenCV ከካሜራ ፊት ማወቂያን እና እውቀትን የማስኬድ ቀላል ምሳሌ ነው። ማሳሰቢያ - እኔ ይህንን ፕሮጀክት ለሴንሰር ውድድር አደረግኩ እና ለመከታተል እና ለመገንዘብ ፊቶች እንደ ሴንሰር ተጠቀምኩኝ። ስለዚህ ፣ ግባችን በዚህ ክፍለ ጊዜ ፣ 1. አናኮንዳ ጫን 2. ክፍት CV ጥቅልን ያውርዱ። ፊት ለይቶ ለማወቅ ኮድ ያድርጉ 6. የውሂብ ስብስብ ለመፍጠር ኮድ ይስሩ 7. መታወቂያውን ለማሠልጠን ኮድ ይስሩ 8. ፊቶችን እና ውጤትን ለመለየት ኮድ ያድርጉ።
ደረጃ 1 አናኮንዳ ጫን
አናኮንዳ በመሠረቱ እንደ NumPy ፣ Pandas ፣ IPython Notebook ፣ ወዘተ ባሉ ብዙ ጠቃሚ ጥቅሎች የተላከ በጥሩ ሁኔታ የታሸገ የ Python IDE ነው በሳይንሳዊ ማህበረሰብ ውስጥ በሁሉም ቦታ የሚመከር ይመስላል። እሱን ለመጫን አናኮንዳ ይመልከቱ።
ደረጃ 2: ክፍት CV ጥቅል ያውርዱ
በመጀመሪያ ፣ የተሟላውን የ OpenCV ጥቅል ለማውረድ ወደ ኦፊሴላዊው የ OpenCV ጣቢያ ይሂዱ። የሚወዱትን ስሪት ይምረጡ (2.x ወይም 3.x)። እኔ በ Python 2.x እና OpenCV 2.x ላይ ነኝ - በዋነኝነት ምክንያቱም የ OpenCV -Python አጋዥ ሥልጠናዎች በማዋቀር/ላይ የተመሠረተ ነው።
በእኔ ሁኔታ ጥቅሉን (በዋናነት አቃፊ) በቀጥታ ወደ ኤፍ ድራይቭ አውጥቻለሁ። (ኤፍ: / opencv)።
ደረጃ 3 - የአካባቢ ተለዋዋጮችን ያዘጋጁ
የ cv2.pyd ፋይልን ይቅዱ እና ይለጥፉ
የአናኮንዳ ጣቢያ-ፓኬጆች ማውጫ (ለምሳሌ ኤፍ ፦ / የፕሮግራም ፋይሎች / Anaconda2 / Lib / የጣቢያ-ጥቅሎች በእኔ ሁኔታ) እርስዎ ሊያስመጧቸው የሚችሏቸው የ Python ጥቅሎችን ይ containsል። ግባችን የ cv2.pyd ፋይልን ወደዚህ ማውጫ መገልበጥ እና መለጠፍ ነው (እኛ የማስመጣት cv2 ን በእኛ Python ኮዶች ውስጥ መጠቀም እንድንችል)።
ይህንን ለማድረግ የ cv2.pyd ፋይልን ይቅዱ…
ከዚህ የ OpenCV ማውጫ (የመጀመሪያው ክፍል በማሽንዎ ላይ ትንሽ የተለየ ሊሆን ይችላል)
# Python 2.7 እና 64-ቢት ማሽን F: / opencv / build / Python / 2.7 / x64# Python 2.7 እና 32-bit machine: F: / opencv / build / Python / 2.7 / x84
ለዚህ የአናኮንዳ ማውጫ (የመጀመሪያው ክፍል በማሽንዎ ላይ ትንሽ የተለየ ሊሆን ይችላል)
ኤፍ: / የፕሮግራም ፋይሎች / Anaconda2 / Lib / ጣቢያ-ጥቅሎች
ይህንን እርምጃ ከፈጸምን በኋላ አሁን በፒቶን ኮድ የማስመጣት cv2 ን መጠቀም እንችላለን። ግን FFMPEG (የቪዲዮ ኮዴክ) እንዲሠራ (ቪዲዮዎችን እንደ ማቀናበር ያሉ ነገሮችን እንድናደርግ ለማስቻል) አሁንም ትንሽ ተጨማሪ ሥራ መሥራት አለብን።
በ “የእኔ ኮምፒተር” (ወይም “ይህ ፒሲ” በዊንዶውስ 8.1 ላይ) ላይ በቀኝ ጠቅ ያድርጉ-> በግራ-ጠቅታ ባህሪዎች-> በግራ-ጠቅታ “የላቀ” ትር-> በግራ ጠቅታ “የአካባቢ ተለዋዋጮች…” ቁልፍ። አዲስ የተጠቃሚ ተለዋዋጭ ያክሉ። ወደ OpenCV (ወይ ለ x86 ለ 32 ቢት ስርዓት ወይም ለ 64 ቢት ስርዓት x64።) በአሁኑ ጊዜ በ 64 ቢት ማሽን ላይ ነኝ።
32-bitOPENCV_DIRC: / opencv / build / x86 / vc12
64-bitOPENCV_DIRC: / opencv / build / x64 / vc12
%OPENCV_DIR %\ bin ን ለተጠቃሚው ተለዋዋጭ PATH ያያይዙ።
ለምሳሌ ፣ የእኔ የ PATH ተጠቃሚ ተለዋዋጭ እንደዚህ ይመስላል…
ከዚህ በፊት:
ረ: / ተጠቃሚዎች / ጆኒ / Anaconda; ሐ: / ተጠቃሚዎች / ጆኒ / አናኮንዳ / ስክሪፕቶች
በኋላ ፦
ረ: / ተጠቃሚዎች / ጆኒ / anaconda; ሐ: / ተጠቃሚዎች / ጆኒ / anaconda / ስክሪፕቶች;%OPENCV_DIR%\ bin
እኛ ያበቃነው ይህ ነው! FFMPEG ለመጠቀም ዝግጁ ነው!
ደረጃ 4: ለማረጋገጥ ሙከራ
አሁን በአናኮንዳ (በ Spyder IDE በኩል) እነዚህን ማድረግ እንደምንችል መሞከር አለብን።
- የ OpenCV ጥቅል ያስመጡ
- የ FFMPEG መገልገያውን ይጠቀሙ (ቪዲዮዎችን ለማንበብ/ለመፃፍ/ለማስኬድ)
ሙከራ 1: OpenCV ን ማስመጣት እንችላለን?
አናኮንዳ አሁን የ OpenCV-Python ጥቅል (ማለትም ፣ cv2) ማስመጣት መቻሉን ለማሳመን ፣
በ IPython ኮንሶል ውስጥ እነዚህን ያቅርቡ
ማስመጣት cv2
ሕትመት cv2._ ስሪት_
ጥቅሉ cv2 ምንም ስህተቶች ከሌሉት እሺ ከውጭ ከገባ ፣ እና የ cv2 ስሪት ከታተመ እኛ ሁላችንም ጥሩ ነን!
ሙከራ 2 - የ FFMPEG ኮዴክን መጠቀም እንችላለን?
ናሙና ያስቀምጡ
input_video.mp4
የቪዲዮ ፋይል በማውጫ ውስጥ። የምንችለውን ለመሞከር እንፈልጋለን -
- ይህን.mp4 ቪዲዮ ፋይል ያንብቡ ፣ እና
- አዲስ የቪዲዮ ፋይል ይፃፉ (.avi ወይም.mp4 ወዘተ ሊሆን ይችላል)
ይህንን ለማድረግ የሙከራ ፓይዘን ኮድ ሊኖረን ይገባል ፣ test.py ብለው ይደውሉለት። እንደ ናሙናው በተመሳሳይ ማውጫ ውስጥ ያስቀምጡት
input_video.mp4
ፋይል።
ይህ ነው
ፈተና.ፒ
ሊመስል ይችላል (ማስታወሻ - በአስተያየቱ መስክ ለፔት እና ለ ዋረን ጥቆማዎች ብዙ አመሰግናለሁ - የመጀመሪያውን የሙከራ ኮዴን በእሱ ተተክቻለሁ - እባክዎን እራስዎ ይሞክሩት እና ይህ በተሻለ ሁኔታ የሚሰራ ከሆነ ያሳውቁን)
ማስመጣት cv2
cap = cv2. VideoCapture ("input_video.mp4") የህትመት cap.isOpened () # እውነት = ቪዲዮን በተሳካ ሁኔታ አንብብ። ውሸት - ቪዲዮ ማንበብ አልተሳካም። fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out. ተከፈተ () # እውነት = ቪዲዮውን በተሳካ ሁኔታ ጻፉ። ውሸት - ቪዲዮን አለመፃፍ። ካፕ. መልቀቅ () መውጣት። መልቀቅ ()
ይህ ፈተና በጣም አስፈላጊ ነው። የቪዲዮ ፋይሎችን ማስኬድ ከፈለጉ አናኮንዳ / ስፓይደር አይዲኤፍ ኤፍኤምፒኤም (የቪዲዮ ኮዴክ) መጠቀም መቻሉን ማረጋገጥ ያስፈልግዎታል። ሥራውን ለማከናወን ብዙ ቀናት ወስዶብኛል። ግን ብዙ ጊዜ እንደሚወስድዎት ተስፋ አደርጋለሁ! ማስታወሻ) አናኮንዳ ስፓይደር አይዲኢን ሲጠቀሙ አንድ ተጨማሪ በጣም ጠቃሚ ጠቃሚ ምክር። የአሁኑን የሥራ ማውጫ (CWD) መፈተሽዎን ያረጋግጡ !!!
ደረጃ 5: ፊት ለይቶ ለማወቅ ኮድ ያድርጉ
ግብ
በዚህ ክፍለ ጊዜ ፣
- በሃር ባህርይ ላይ የተመረኮዘ የ Cascade Classifiers ን በመጠቀም የፊት ለይቶ ማወቅ መሰረታዊ ነገሮችን እናያለን
- እኛ ለዓይን ማወቂያ ወዘተ ተመሳሳይ እንዘረጋለን
በ OpenCV ውስጥ Haar-cascade ለይቶ ማወቅ
እዚህ እኛ ማወቅን እንይዛለን። OpenCV አስቀድሞ ለፊቱ ፣ ለዓይኖች ፣ ለፈገግታ ብዙ አስቀድሞ የሰለጠኑ ምደባዎችን ይ containsል ፣ እነዚያ የኤክስኤምኤል ፋይሎች በ opencv/data/haarcascades/folder ውስጥ ይከማቻሉ። በ OpenCV የፊት እና የዓይን መመርመሪያን እንፍጠር። በመጀመሪያ የሚያስፈልጉትን የኤክስኤምኤል መደብ ሰጪዎችን መጫን አለብን። ከዚያ የግቤት ምስላችንን (ወይም ቪዲዮን) በግራጫ ሚዛን ሁኔታ ይጫኑ ወይም ካሜራ መጠቀም እንችላለን (ለእውነተኛ ጊዜ ፊት ለይቶ ማወቅ)
ቁጥርን እንደ np ያስመጡ
አስመጣ cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade.xml ') cap = cv2. VideoCapture (0) 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.5 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) roi_gray = ግራጫ [y: y +h ፣ x: x+w] roi_color = img [y: y+h ፣ x: x+w] ዓይኖች = eye_cascade.detectMultiScale (roi_gray) ለ (ለምሳሌ ፣ አይ ፣ እ ፣ እ) በዓይኖች ውስጥ: cv2. rectangle (roi_color ፣ (የቀድሞ ፣ አይ) ፣ (የቀድሞ +ኤው ፣ አይ +ኤህ) ፣ (0 ፣ 255 ፣ 0) ፣ 2) “ተገኝቷል” +str (ሌን (ፊቶች)) +“ፊት (ዎች)” cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff ከሆነ k == 27
ደረጃ 6 የውሂብ ቅንብር ለመፍጠር ኮድ ያዘጋጁ
እኛ የፊት መታወቂያ እያደረግን ነው ፣ ስለዚህ አንዳንድ የፊት ምስሎች ያስፈልግዎታል! የራስዎን የውሂብ ስብስብ መፍጠር ወይም ከሚገኙት የፊት የውሂብ ጎታዎች በአንዱ መጀመር ይችላሉ ፣ https://face-rec.org/databases/ ወቅታዊ የሆነ አጠቃላይ እይታ ይሰጥዎታል። ሶስት አስደሳች የመረጃ ቋቶች (የማብራሪያው ክፍሎች ከ https://face-rec.org ተጠቅሰዋል)
- AT&T Facedatabase
- ያሌ Facedatabase ሀ
- የተራዘመ ዬል Facedatabase ለ
ከዚህ በታች በተሰጠው ኮድ እገዛ የራሴን የውሂብ ስብስብ እጠቀማለሁ….
ቁጥርን እንደ np ያስመጡ
አስመጣ cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('user id') sampleN = 0; ሳለ 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.3 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: ናሙናN = ናሙናN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg" ፣ ግራጫ [y: y+h, x: x+w]) cv2.አራት ማዕዘን (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) cv2.waitKey (100) cv2., img) cv2.waitKey (1) ናሙና ከሆነ N> 20: መክፈቻ ካፕ. መልቀቅ () cv2.destroyAllWindow ()
ደረጃ 7 መታወቂያውን ለማሠልጠን ኮድ ያዘጋጁ
የስልጠናውን ስብስብ ለማዘጋጀት ተግባሩን ይፍጠሩ
አሁን አንድ ተግባር እንገልፃለን
getImagesWithID (መንገድ)
ወደ ምስሉ የውሂብ ጎታ እንደ ግብዓት ክርክር ፍፁም መንገድ የሚወስድ እና የ 2 ዝርዝርን ቱፕል ይመልሳል ፣ አንደኛው የተገኙትን ፊቶች የያዘ እና ሁለተኛው ለዚያ ፊት ተጓዳኝ መለያ የያዘ። ለምሳሌ ፣ በፊቶች ዝርዝር ውስጥ ያለው የኢት መረጃ ጠቋሚ በውሂብ ጎታ ውስጥ 5 ኛውን ግለሰብ የሚወክል ከሆነ ፣ በመለያዎች ዝርዝር ውስጥ ያለው ተጓዳኝ የኢት ቦታ ከ 5 ጋር እኩል የሆነ እሴት አለው።
አሁን ከዚህ በታች በተሰጠው ኮድ እገዛ የውሂብ ስብስብ ፊቶችን (በደረጃ 6 የተፈጠረ) ወደ.yml ፋይል ይለውጡ -
አስመጣ os
nump ን እንደ np ማስመጣት cv2 ከ PIL ማስመጣት ምስል # ለመልክት እኛ LBPH የፊት ለይቶ ማወቂያ = cv2.createLBPHFaceRecognizer (); ዱካ = "ኤፍ:/የፕሮግራም ፋይሎች/ፕሮጀክቶች/face_rec/facesData" def getImagesWithID (ዱካ): imagePaths = [os.path.join (ዱካ ፣ ረ) ለ f በ os.listdir (ዱካ)] # የህትመት ምስል_መንገድ #getImagesWithID (መንገድ) ፊቶች = መታወቂያዎች = በምስል መንገድ ውስጥ ለምስል መንገድ - # ምስሉን ያንብቡ እና ወደ ግራጫማ ፊቶችImg = Image.open (imagePath)። ይለውጡ ('L') faceNP = np.array (faceImg ፣ 'uint8') # የምስል መታወቂያውን = int (os.path.split (imagePath) [-1].split (".") [1]) # በምስሉ ፊቶች ውስጥ ፊቱን ይፈልጉ። ተግብር (faceNP) መታወቂያዎች (መታወቂያ) cv2.imshow ("ለመሸጋገር ፊቶችን ማከል" ፣ faceNP) cv2.waitKey (10) መመለስ np.array (መታወቂያዎች) ፣ ፊቶች Ids ፣ face = getImagesWithID (መንገድ) recognizer.train (ፊቶች ፣ አይዶች) recognizer.save ("ኤፍ:/የፕሮግራም ፋይሎች/ፕሮጀክቶች/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()
ይህንን ኮድ በመጠቀም ሁሉም የፊት ውሂብ ስብስብ ወደ አንድ.yml ፋይል ይቀየራል…..የመገኛ ቦታ ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")
ደረጃ 8 ፊቶችን እና ውጤትን ለመለየት ኮድ ያድርጉ
Guyzz ይህ በድር ካሜራዎ አማካኝነት ፊቶችን ለመለየት ኮዱን የምንፈጥርበት የመጨረሻው እርምጃ ነው። በዚህ ደረጃ የሚከናወኑ ሁለት ተግባራት አሉ…. 1. ቪዲዮውን ከካሜም መቅረጽ 2. ከእርስዎ.yml ፋይል ጋር ያወዳድሩ
nump ን እንደ npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL ፣ 5, 1, 0, 4) 1: ret, img = cap.read () ግራጫ = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ፊቶች = face_cascade.detectMultiScale (ግራጫ ፣ 1.5 ፣ 5) ለ (x ፣ y ፣ w ፣ h) በፊቶች ውስጥ: cv2. rectangle (img ፣ (x ፣ y) ፣ (x+w ፣ y+h) ፣ (255 ፣ 0 ፣ 0) ፣ 2) መታወቂያ ፣ conf = rec. ትንበያ (ግራጫ [y: y+h ፣ x: x+w]) ከሆነ (id == 2): id = "alok" id id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) cv2.waitKey (1) == ord ('q'): ካፕ ይሰብሩ። መልቀቅ ()
cv2. DestroyAllWindow ()
እና በመጨረሻ ውጤቱ ከዓይኖችዎ ፊት ለፊት ይመጣል …… እንዲሁም የዚፕ ፋይሉን ከአገናኙ በታች ማውረድ ይችላሉ -ኮዶቹን ለማውረድ እዚህ ጠቅ ያድርጉ። ስለዚህ ፣ በዚህ መመሪያ ውስጥ OpenCV ን በመጠቀም የፊት ለይቶ ማወቅን+የማወቅን ተግባር አከናወንን….. እንደዚህ አስተማሪ….. plzzz ሰብስክራይብ አድርጉልኝ እና ድምጽ ስጡኝ….. ወዳጆች አመሰግናለሁ:)
የሚመከር:
የምስል እውቅና በ K210 ቦርዶች እና በአርዱዲኖ አይዲኢ/ማይክሮፎን 6 ደረጃዎች (ከስዕሎች ጋር)
የምስል እውቅና በ K210 ቦርዶች እና በአርዱዲኖ አይዲኢ/ማይክሮፎን - እኔ በ ‹Sipeed Maix Bit› ላይ የ OpenMV ማሳያዎችን እንዴት ማሄድ እንደሚቻል አንድ ጽሑፍ ቀደም ብዬ ጽፌ ነበር እንዲሁም በዚህ ሰሌዳ የነገር ማወቂያ ማሳያ ቪዲዮም አደረግሁ። ሰዎች ከጠየቋቸው ብዙ ጥያቄዎች አንዱ - የነርቭ ኔትወርክ ያልሆነውን ነገር እንዴት መለየት እችላለሁ
የቀለም እውቅና ወ/ TCS230 ዳሳሽ እና አርዱinoኖ [የመለኪያ ኮድ ተካትቷል] 12 ደረጃዎች
የቀለም እውቅና W/ TCS230 ዳሳሽ እና አርዱinoኖ [የመለኪያ ኮድ ተካትቷል] አጠቃላይ እይታ በዚህ መማሪያ ውስጥ ስለ TCS230 ዳሳሽ እና ቀለሞችን ለመለየት ከአርዱዲኖ ጋር እንዴት እንደሚጠቀሙበት ይማራሉ። በዚህ መማሪያ መጨረሻ ላይ የቀለም መልቀሚያ ብዕር ለመፍጠር አስደናቂ ሀሳብ ያገኛሉ። በዚህ ብዕር ፣ የ… ያሉትን ቀለሞች መቃኘት ይችላሉ
የ ESP32 CAM የፊት እውቅና በ MQTT ድጋፍ - AI-Thinker: 4 ደረጃዎች
የ ESP32 CAM የፊት እውቅና በ MQTT ድጋፍ | AI-Thinker: ጤና ይስጥልኝ! ለ ‹MQTT ›መረጃን መላክ የሚችል የ‹ ESP CAM ›እንዲኖረኝ ከተፈለገ ለፕሮጀክት ኮዴን ለማካፈል ፈልጌ ነበር። ደህና። ምናልባት ከ 7 ሰዓታት በኋላ ብዙ የኮድ ምሳሌዎችን በመመልከት እና ምን እንደ ሆነ በመፈለግ ፣ ፍፃሜ አለኝ
አርዱዲኖ ጊታር ጃክ ቁልፍ ያዥ በጃክ እውቅና እና ኦሌድ 7 ደረጃዎች
አርዱዲኖ ጊታር ጃክ ቁልፍ ያዥ ከጃክ እውቅና እና ከኦሌድ ጋር: መግቢያ - ይህ አስተማሪ በአርዱዲኖ ላይ የተመሠረተ የጊታር ጃክ ተሰኪ ቁልፍ መያዣን ግንባታ በዝርዝር ይገልጻል ይህ በመንገድ ላይ ለውጦችን / ዝመናዎችን ማድረግ ስለምችል እባክዎን ይታገሱኝ።
CS122A የድምፅ እውቅና የሙዚቃ ማጫወቻ -7 ደረጃዎች
CS122A የድምፅ እውቅና የሙዚቃ ማጫወቻ - ይህ የድምፅ ማወቂያ የሙዚቃ ማጫወቻ ነው። ምን ያህል የዘፈን ርዕሶች እና አርቲስት እንዳከማቹት በመወሰን እስከ 33 ዘፈኖችን ማጫወት ይችላል