<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های علی نادری</title><link>https://virgool.ir/feed/@khod.naderi</link><description>اگه خواستی می تونیم با khod.naderi@gmail.com با هم در ارتباط باشیم ;)</description><language>fa</language><pubDate>2026-11-12 18:16:14</pubDate><image><url>https://files.virgool.ir/upload/users/418728/avatar/ByWavS.jpg</url><title>علی نادری</title><link>https://virgool.ir/@khod.naderi</link></image><item><title>چه غریب ماندی ای انشاء</title><link>https://virgool.ir/@khod.naderi/چه-غریب-ماندی-ای-انشاء-vcrlmilurzig</link><description>نگارش نهمنشسته ام به برگه نگاه می کنم. مغزم سوت میکشد. فرشته وحی تو از کدام راه می ایی ؟ وقت امتحانم در انتظار امدنت تمام شد. نیامدی و دیرشد.روی برگه سه موضوع نوشته شده: الف، ب و ج. به هرکدام که می نگرم چیزی به ذهنم نمی رسد. با خود می گویم چه غریب مانده ای   ای انشاء؛ روز قبل از امتحان نگارش همه مشغول بازی هستند، مگر امتحان انشاء چه دارد ؟ باید یک مشت چرند و پرند بر برگه امتحان سرازیر کنید و سپس برگه را با کمی علائم نگارشی تفت بدهید، بعد از آن جملات قلمبه، شعر و مثل را به آن اضافه کنی و با خودکار قرمز تزئین کنی، اکنون انشاء آماده سرو است. امّا فردای آن روز می فهمید خیر ! اصلا هم اینگونه نیست. آن هم وقتی که داری با یک مغز قفل شده به برگه امتحات سرشار از سفیدی ات می نگری. با خود می گویی ای کاش حداقل چهار تا جزوه می خوندم یا لااقل کتابو می خوندم که این قدر غلط املایی نداشته باشم. چرا هیچ چیزی به ذهنم نمی رسد !؟ در همین هنگام بود که چشمم از دور به برگه دیگران افتاد، اوه غضنفر نصف برگه اش را نوشته! اکبری که اصلا تمام کرده و دارد پاک نویس می کند. انگاه من ماندم و برگه ای پر از خالی. آهی به بلندای فریاد شخصی درحال آمپولی کوفتن در اعماق وجودم کشیدم، هرچه که فکر می کنم چیزی برای نوشتن پیدا نمی کنم. اصلا چگونه باید چیزی برای نوشتن پیدا کرد ؟ سوال خوبی است. اما جوابش را نمی دانم و این است که بد است. کمی فکر می کنم، بازهم هیچ، و دوباره فکر می کنم. چشمم به ساعت کلاس می افتد، یا ابالفضل فقط نیم ساعت از زمان ازمون باقی مانده و من هنوز هیچ ننوشته ام.....................آهان، یافتم جواب آن سوال نفس گیر را. در کتاب درسی گفته شده بود که باید برای نوشتن از احساسات و حواسمان بهره ببریم، احساس من الان چیست ؟ احساس کسی که قراره صفر بگیره، هییییییییی؛ اوه، وایسا، می توانم همین احساس را بنویسم؛ احساسی که در آن برگه ای کل التهی داری، حسرت دیروز را می خوری و به ساعت روی دیوار می نگری. پس ای قلم بتازان که زدیم انشاء را عمه مادر-عمو پدر کردیم.این بود انشاء ما در امتحان نهایی سال نهم.علی نادری 1401/03/11</description><category>علی نادری</category><author>علی نادری</author><pubDate>Wed, 01 Jun 2022 11:20:35 +0430</pubDate></item><item><title>طراحی بازی Flappy Bird با Python و بینایی ماشین ( Mediapipe )</title><link>https://virgool.ir/@khod.naderi/طراحی-بازی-flappy-bird-با-python-و-بینایی-ماشین-mediapipe-heyuujqnofgg</link><description>Flappy Bird Python Computer Vision  ( mediapipe )سلام به همه شما دوستان عزیز :)تو این پست قراره بازی flappy bird رو با پایتون پیاده کنیم اما این بازی یه نکته متمایز کننده نسبت به بقیه flappy bird ها داره، اونم اینه که قراره برای کنترل پرنده از بینایی ماشین استفاده کنید. شاید الان با خودتون بگین که خب پس ولش کن این مطلب به درد ما نمی خوره، چون یا بینایی ماشین رو با اون الگوریتم های ریاضی سختش بلد نیستید یا کتابخانه هایی مثل opencv رو بلد نیستید. اما در جواب باید بگم هیچ کدوم لازم نیست :)))شاید با تعجب بگین چطوری ؟؟؟؟گوگل چند وقت پیش یه فریمورک به نام Mediapipe منتشر کرد که کار مارو خیلی ساده می کنه.یعنی دیگه لازم نیست کتاب های طویل بینایی ماشین و یادگیری ماشین رو بخونید تا بتونید همچین پروژه ای را انجام بدید، و هر شخص اماتور و یا حتی کسی که تخصصش هیچ ربطی به بینایی ماشین نداره ( مثل من ) بتونه پروژه های خودش را به سادگی پیاده سازی کنه.خب دیگه بحث کافیه بریم سراغ آموزش.نصب پیش نیاز ها $ pip install mediapipe -Uبا این دستور خود mediapipe و تمام نیاز هاش مثل numpy نصب میشه شروع ساختاول از همه main پروژه رو می سازیمimport cv2, mediapipe   &#xA;from random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;&#xA;def main() -&gt; None:&#xA;        pass&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()اول کتابخانه های opencv و mediapipe و .. رو اضافه میکنیم چون لازمشون داریم، و بعد به main ساده می سازیم.حالا نیاز به تصویر داریم برای همین وبکم رو کانفیگ می کنیم و بعد ازش تصویر میگیریم با چند تا ریزه کاری دیگهfrom random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;&#xA;def main() -&gt; None:&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA; &#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                pass&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()به جای captureName اسم یا ادرس webcom رو بنویسیددر یک اقدام عجیب همین اول میریم game over رو می نویسیمfrom random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;&#xA;def main() -&gt; None:&#xA;        score = 0&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA; &#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()الان تصویری که بهتون خروجی میده شاید هنگام بازی گیجتون کنه چون رو به روی شماست پس راست شما میشه چپ تصویر و چپ تصویر میشه راست شما برای همین تصویر رو قرینه ( flip ) می کنیم from random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;&#xA;def main() -&gt; None:&#xA;        score = 0&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA;                        img = cv2.flip(img, 1)&#xA; &#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()حالا که تصویر داریم باید چیکار کنیم ؟؟ درسته حدس زدید! ( هرچند نمی دونم چی گفتین :| ) الان باید چهره شخص رو شناسایی کنیم چون قرار پرنده روی دماغ شما پرواز کنه !from random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;&#xA;def main() -&gt; None:&#xA;        face = mediapipe.solutions.face_detection.FaceDetection()&#xA;&#xA;        score = 0&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA;                        img = cv2.flip(img, 1)&#xA; &#xA;                        h, w, c = img.shape&#xA;&#xA;                        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)&#xA;                        res = face.process(imgRGB)&#xA;&#xA;                        if not res.detections: GameOver(score) # Face Not Found in image, To prevent fraud &#xA;&#xA;                        nose = res.detections[0].location_data.relative_keypoints[2] # get position of player nose&#xA;                        nose.x, nose.y = nose.x * w, nose.y * h # Convert float position to Real position in Image&#xA;&#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()قبل از توضیح یه نکته هست اونم اینه که کد های اضافه شده را برای راحتی شما عزیزان Bold کردمگیج نشید، وحشت نکنید، ناراحت ام نشدید. بیاد قدم به قدم پیش بریم.اول از همه از mediapipe سلوشن مربوط به صورت رو با نام face باز کردیم ( چی گفتم =| )بعد ابعاد تصویر رو از img.shape  میگیریمو پس از اون ترکیب رنگ تصویر رو به RGB تغییر میدیم، شاید بپرسید چرا ؟؟ میدیاپایپ می تونه تصاویر RGB رو پردازش کنه در حالی که خروجی webcom ما BGR است ( اگه نمی دونید اینا چین به گوگل مراجعه کنید )و اینجا با یه دستور ساده چهره شخص رو پردازش می کنیم face.process(imgRGB) به همین سادگی دیدید سخت نبودحالا یه شرط می بینید که میگه اگر چهره ای تو تصویر نبود بازی کن را تمام کن، چرا ؟ چون افراد تقلب کار ممکنه صورتشون رو از تصویر خارج کنن اینطوری پرنده ای ظاهر نمیشه و در نتیجه ام نمی بازن حالا مکان بینی شخص داخل تصویر رو پیدا می کنیم، چطوری ؟ mediapipe داخل خروجی هاش درقالب یک لیست به landmark هایی رو میده که هر کدوم مربوط به عضوی از بدن هستن. ایدکس شماره 2 این لیست مربوط به بینی استکار تموم شد ؟ نه! مختصاتی که mediapipe به ما میده یه عدد اعشاری بین 0 و 1 است که در واقیه به نسبت ابعاد تصویره ولی ما به یه عدد صحیح نیاز داریم پس با ضرب کردن این عداد در ابعاد واقعی تصویر مختصات صحیح به دست میادحالا وقت نمایش پرنده است&#xA;from random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;def ShowBird(img: ndarray, x: int, y: int, bird: ndarray) -&gt; None:&#xA;    &#34;&#34;&#34;show bird in pose nose of player&#34;&#34;&#34;&#xA;&#xA;    y = y - 20&#xA;    x = x - 30&#xA;&#xA;    # delete the 0 px for transparent&#xA;    con = bird != 0&#xA;    out = where(con, bird, img[y:y+50, x:x+50]) &#xA;&#xA;    img[y:y+50, x:x+50] = out[:]&#xA;&#xA;def ReadBirdFile() -&gt; ndarray:&#xA;    &#34;&#34;&#34;read and resize bird photo&#34;&#34;&#34;&#xA;&#xA;    bird = cv2.imread(&#34;./media/bird.png&#34;)&#xA;    bird = cv2.resize(bird, [50,50])&#xA;    return bird&#xA;&#xA;def main() -&gt; None:&#xA;        face = mediapipe.solutions.face_detection.FaceDetection()&#xA;&#xA;        score = 0&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        bird = ReadBirdFile()&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA;                        img = cv2.flip(img, 1)&#xA; &#xA;                        h, w, c = img.shape&#xA;&#xA;                        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)&#xA;                        res = face.process(imgRGB)&#xA;&#xA;                        if not res.detections: GameOver(score) # Face Not Found in image, To prevent fraud &#xA;&#xA;                        nose = res.detections[0].location_data.relative_keypoints[2] # get position of player nose&#xA;                        nose.x, nose.y = nose.x * w, nose.y * h # Convert float position to Real position in Image&#xA;&#xA;                        ShowBird(   &#xA;                                                img,&#xA;                                                int(nose.x),&#xA;                                                int(nose.y),&#xA;                                                bird&#xA;                                            )&#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()سوالی که پیش میاد اینه که پرنده را از کجا بیارین ؟؟خب همون طور که می بینید یه تابع نوشتیم به نام ReadBirdFile که از طریق اون از یک فایل عکس پرنده رو می خونیم و سپس اون رو resize می کنیم تا خیلی بزرگ نشهدر اخر هم با تابع ShowBird پرنده رو نمایش می دیم، اول یکم مختصات را تغییر میدیم تا پرنده دقیق روی بینی قرار بگیره بعد هم برای اینکه دور پرنده شفاف باشه نقاط سیاه رنگ پس زمینه عکس پرنده رو  یعنی جایی که کد رنگش 0 باشه رو با نقاط تصویر اصلی عوض می کنیم و تصویر حاصل رو روی بینی شخص قرار میدیمالان بازی تا جای خوبی پیشرفته ولی خب مثل بازی اصلی نشده داخل بازی اصلی یه سری دیوار هایی سر راه ما سبز میشن که اگه به اونا برخورد کنیم می میریم ( اما نه تو دنیا واقعی ) پس بیاید بنویسیمشfrom random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def isCollision(x: int, y: int, wallBuf: list) -&gt; bool:&#xA;    &#34;&#34;&#34;Check of Collision bird to wall&#34;&#34;&#34;&#xA;&#xA;    for wall in wallBuf:&#xA;        &#xA;        if x in range(wall[0], wall[0]+40): # bird in location of wall&#xA;            &#xA;            if not y in range(wall[1]-100, wall[1]): # bird not in space between top and buttom wall (Collision)&#xA;                return True&#xA;&#xA;    return False&#xA;&#xA;def MoveWall(wallBuf) -&gt; list:&#xA;    &#34;&#34;&#34;Move Wall Right to Left, 10px per frame&#34;&#34;&#34;&#xA;&#xA;    newWallBuf = list()&#xA;&#xA;    for wall in wallBuf:&#xA;        newWallBuf.append((wall[0]-10, wall[1]))&#xA;&#xA;    return newWallBuf&#xA;&#xA;def DrawWallBuffer(img: ndarray, wallBuf: list) -&gt; None:&#xA;    &#34;&#34;&#34;Draw Wall Buffer To img Buffer&#34;&#34;&#34;&#xA;&#xA;    h, w, c = img.shape&#xA;&#xA;    for wall in wallBuf:&#xA;        cv2.rectangle(img, (wall[0], h), (wall[0]+40, wall[1]), (0, 255, 0), cv2.FILLED) # buttom wall &#xA;        cv2.rectangle(img, (wall[0], 0), (wall[0]+40, wall[1]-100), (0, 255, 0), cv2.FILLED) # top wall&#xA;&#xA;def GenWall(h: int) -&gt; int:&#xA;    &#34;&#34;&#34;&#xA;    Generate y of buttom wall&#xA;    h is hight of window&#xA;    &#34;&#34;&#34;&#xA;    &#xA;    return randint(101, h-40)&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;def ShowBird(img: ndarray, x: int, y: int, bird: ndarray) -&gt; None:&#xA;    &#34;&#34;&#34;show bird in pose nose of player&#34;&#34;&#34;&#xA;&#xA;    y = y - 20&#xA;    x = x - 30&#xA;&#xA;    # delete the 0 px for transparent&#xA;    con = bird != 0&#xA;    out = where(con, bird, img[y:y+50, x:x+50]) &#xA;&#xA;    img[y:y+50, x:x+50] = out[:]&#xA;&#xA;def ReadBirdFile() -&gt; ndarray:&#xA;    &#34;&#34;&#34;read and resize bird photo&#34;&#34;&#34;&#xA;&#xA;    bird = cv2.imread(&#34;./media/bird.png&#34;)&#xA;    bird = cv2.resize(bird, [50,50])&#xA;    return bird&#xA;&#xA;def main() -&gt; None:&#xA;        face = mediapipe.solutions.face_detection.FaceDetection()&#xA;&#xA;        score = 0&#xA;        frame = 0&#xA;        wallBuf = list()&#xA;&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        bird = ReadBirdFile()&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA;                        img = cv2.flip(img, 1)&#xA; &#xA;                        h, w, c = img.shape&#xA;&#xA;                        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)&#xA;                        res = face.process(imgRGB)&#xA;&#xA;                        if not res.detections: GameOver(score) # Face Not Found in image, To prevent fraud &#xA;&#xA;                        nose = res.detections[0].location_data.relative_keypoints[2] # get position of player nose&#xA;                        nose.x, nose.y = nose.x * w, nose.y * h # Convert float position to Real position in Image&#xA;&#xA;                        ShowBird(   &#xA;                                                img,&#xA;                                                int(nose.x),&#xA;                                                int(nose.y),&#xA;                                                bird&#xA;                                            )&#xA;&#xA;                        frame += 1&#xA;                         if frame &gt;= 15: # Genrate a New Wall at 15 frame&#xA;                                        frame = 0&#xA;                                        wallBuf.append( ( w-50, GenWall(h) ) )&#xA;&#xA;                         DrawWallBuffer(img, wallBuf)&#xA;&#xA;                          wallBuf = MoveWall(wallBuf)&#xA;            &#xA;                          if isCollision(int(nose.x), int(nose.y), wallBuf):&#xA;                                        GameOver(score)&#xA;                           else:&#xA;                                        score += 1&#xA;&#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()اوه چی بود چی شد  =^| اولش که خیلی اسونه هر 15 فریم یه دیوار می سازیم ( فقط Y پایین فاصله دو دیوار بالا و پایین رو رندم می سازیم بقیش قابل محاسبه است ) و به بافر دیوار های اضافه اش می کنیمبعد میگیم دیوار هارو نمایش بده (در واقع ما تو لیست دیوار ها فقط مقدار y بخش پایینی فضای خالی دیوار هارو داریم و بقیه مقادیر رو محاسبه می کنیم)انیجاش میایم دیوار هارو حرکت میدیم خیلی ام ساده است حالا بررسی می کنیم ببینیم با دیواری برخورد کردیم یا نه ؟ اگه خورده بودیم به دیوار که باختیم ولی اگه از وسطش رد شدیم امتیاز میگیریم. ( داخل تابع اش میایم تمام دیوار هارو مورد بررسی قرارا می دیم تا ببینیم بینشون هستیم یا روشون )امتیاز ها چی شد پس ؟from random import randint   &#xA;from numpy import where, ndarray&#xA;&#xA;def isCollision(x: int, y: int, wallBuf: list) -&gt; bool:&#xA;    &#34;&#34;&#34;Check of Collision bird to wall&#34;&#34;&#34;&#xA;&#xA;    for wall in wallBuf:&#xA;        &#xA;        if x in range(wall[0], wall[0]+40): # bird in location of wall&#xA;            &#xA;            if not y in range(wall[1]-100, wall[1]): # bird not in space between top and buttom wall (Collision)&#xA;                return True&#xA;&#xA;    return False&#xA;&#xA;def MoveWall(wallBuf) -&gt; list:&#xA;    &#34;&#34;&#34;Move Wall Right to Left, 10px per frame&#34;&#34;&#34;&#xA;&#xA;    newWallBuf = list()&#xA;&#xA;    for wall in wallBuf:&#xA;        newWallBuf.append((wall[0]-10, wall[1]))&#xA;&#xA;    return newWallBuf&#xA;&#xA;def DrawWallBuffer(img: ndarray, wallBuf: list) -&gt; None:&#xA;    &#34;&#34;&#34;Draw Wall Buffer To img Buffer&#34;&#34;&#34;&#xA;&#xA;    h, w, c = img.shape&#xA;&#xA;    for wall in wallBuf:&#xA;        cv2.rectangle(img, (wall[0], h), (wall[0]+40, wall[1]), (0, 255, 0), cv2.FILLED) # buttom wall &#xA;        cv2.rectangle(img, (wall[0], 0), (wall[0]+40, wall[1]-100), (0, 255, 0), cv2.FILLED) # top wall&#xA;&#xA;def GenWall(h: int) -&gt; int:&#xA;    &#34;&#34;&#34;&#xA;    Generate y of buttom wall&#xA;    h is hight of window&#xA;    &#34;&#34;&#34;&#xA;    &#xA;    return randint(101, h-40)&#xA;&#xA;def GameOver(score: int) -&gt; None:&#xA;    &#34;&#34;&#34;Show `Game Over!` message and `player score` then exit the game&#34;&#34;&#34;&#xA;&#xA;    print(&#34;Game Over!&#34;)&#xA;    print(f&#34;Your Score: {score}&#34;)&#xA;    print(&#34;bye bye :)&#34;)&#xA;    exit(0)&#xA;&#xA;def ShowBird(img: ndarray, x: int, y: int, bird: ndarray) -&gt; None:&#xA;    &#34;&#34;&#34;show bird in pose nose of player&#34;&#34;&#34;&#xA;&#xA;    y = y - 20&#xA;    x = x - 30&#xA;&#xA;    # delete the 0 px for transparent&#xA;    con = bird != 0&#xA;    out = where(con, bird, img[y:y+50, x:x+50]) &#xA;&#xA;    img[y:y+50, x:x+50] = out[:]&#xA;&#xA;def ReadBirdFile() -&gt; ndarray:&#xA;    &#34;&#34;&#34;read and resize bird photo&#34;&#34;&#34;&#xA;&#xA;    bird = cv2.imread(&#34;./media/bird.png&#34;)&#xA;    bird = cv2.resize(bird, [50,50])&#xA;    return bird&#xA;&#xA;def main() -&gt; None:&#xA;        face = mediapipe.solutions.face_detection.FaceDetection()&#xA;&#xA;        score = 0&#xA;        frame = 0&#xA;        wallBuf = list()&#xA;&#xA;        cap = cv2.VideoCapture(captureName)&#xA;        bird = ReadBirdFile()&#xA;        try:&#xA;                while cap.isOpened():&#xA;                        success, img = cap.read() &#xA;                        if not success:     &#xA;                                print(&#34;[ERROR] Read Capture Faild.&#34;)   &#xA;                                break&#xA;                        img = cv2.flip(img, 1)&#xA; &#xA;                        h, w, c = img.shape&#xA;&#xA;                        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)&#xA;                        res = face.process(imgRGB)&#xA;&#xA;                        if not res.detections: GameOver(score) # Face Not Found in image, To prevent fraud &#xA;&#xA;                        nose = res.detections[0].location_data.relative_keypoints[2] # get position of player nose&#xA;                        nose.x, nose.y = nose.x * w, nose.y * h # Convert float position to Real position in Image&#xA;&#xA;                        ShowBird(   &#xA;                                                img,&#xA;                                                int(nose.x),&#xA;                                                int(nose.y),&#xA;                                                bird&#xA;                                            )&#xA;&#xA;                        frame += 1&#xA;                         if frame &gt;= 15: # Genrate a New Wall at 15 frame&#xA;                                        frame = 0&#xA;                                        wallBuf.append( ( w-50, GenWall(h) ) )&#xA;&#xA;                         DrawWallBuffer(img, wallBuf)&#xA;&#xA;                          wallBuf = MoveWall(wallBuf)&#xA;            &#xA;                          if isCollision(int(nose.x), int(nose.y), wallBuf):&#xA;                                        GameOver(score)&#xA;                           else:&#xA;                                        score += 1&#xA;                        cv2.putText(img, str(score), (5,20),&#xA;                                                cv2.FONT_HERSHEY_TRIPLEX, 0.5, (255,0,0))&#xA;                        cv2.imshow(&#34;Flappy Bird Game!&#34;, img)&#xA;                        cv2.waitKey(1)&#xA;        except KeyboardInterrupt:&#xA;                GameOver(score)&#xA;&#xA;if __name__ == &#34;__main__&#34;:    &#xA;        main()خب همین طور که می بینید با یه خط امتیاز رو گوشیه تصویر نمایش دادیم، تمام :)سخن پایانی خب دوستان خیلی خوشحالم که تا اینجا کنار ما بودید. شما می تونید این پروژه رو داخل github بنده ببینید  ( خوشحال میشم مشارکت کنید یا ستاره بدین ) https://github.com/khod-naderi/flappy_bird جهت یادگیری بهتر این فریم ورک  می تونید به دوره اموزشی بنده در وبسایت جت اموز مراجعه کنید https://jetamooz.com/courses/computer-vision-with-mediapipe/ التماس دعا خدا نگهدار .</description><category>علی نادری</category><author>علی نادری</author><pubDate>Wed, 01 Dec 2021 15:39:39 +0330</pubDate></item><item><title>dos.h</title><link>https://virgool.ir/CodeLovers/dosh-pclheh1aoqhm</link><description>هم زمان با انتشار سیستم عامل داس کتابخانه ای به C  C++ اضافه شد با نام dos.h توجه : اکثر توابع این کتابخانه منسوخ شده و فقط در اندکی از کامپایلر ها است (turbo ++c)چگونه مکث کنیم ؟delay(a);این کد یک int گرفته و واحد ان بر حسب هزارم ثانیه استاما امروزه این تابع منسوخ شده و می توانید به جای ان از sleep استفاده کنید که دقیقا مثل همین است اما با این فرق که برحسب ثانیه استچگونه یک صدا پخش کنیم ؟sound(a);در ان زمان فایل صوتی به ان شکل نبوده و برای پخش صدا پالسی را به کارت صدا ارسال می کردناین تابع یک int گرفته و به کارت صدا ارسال می کنداما اگر ببینید پالس دیگر متوفق نمی شود برای توقف پالس باید از nosound();استفاده نمود توجه : این موارد نیز مانند بقیه منسوخ شده اند چون سیستم عامل ویندوز به این سادگی اجازه دسترسی به سخت افزار رو نمیده اما به بخش جذاب ( که بازم منسوخ شده چون مال dos است :) )کار با سخت افزار سیستم !!!!outportb(register, value);به جای register کد سخت افزار را وارد می کنید ( می تونید از اینترنت و یا کتاب های مثل IBM technical reference پیداش کنی )مثلا بوق سیستم 61h است مثلا #define PORT1 0x3F8  &#xA; &#xA;outportb(PORT1 + 1 , 0);        &#xA;outportb(PORT1 + 3 , 0x80);        &#xA;outportb(PORT1 + 1 , 0x00);  &#xA;outportb(PORT1 + 3 , 0x03);  &#xA;outportb(PORT1 + 2 , 0xC7);  &#xA;outportb(PORT1 + 4 , 0x0B);در اینجا 0x3F8 پورت سریال COM0 است و داره مقدار های را داخل پین های ان می ریزه مثلا در خط دوم در پین 1 پورت سریال 0 را میریزه جالب نیست :)به همين شکل outport() هم وجود دارم اما با تفاوت هایی و برای خواند از سخت افزاری از inportb() و inport() استفاده میشودو .....به دلیل اینکه اکثرا منسوخ شدن بقیشو توضیح نمی دم :) https://www.programmingsimplified.com/c/dos.h اگه علاقه دارید می تونید از این سایت بقیشو بخونید مثل getdate یا gettime یا setdate اکنون windows.h نیز موجود است که شاید در اینده در موردیش با هم صحبت کنیم  ;)</description><category>علی نادری</category><author>علی نادری</author><pubDate>Tue, 26 Jan 2021 20:21:57 +0330</pubDate></item><item><title>conio.h in C / C++</title><link>https://virgool.ir/@khod.naderi/conioh-in-c-c-kekj3ixjp3mz</link><description>conio.hحتما تا الان اسم زبان C و ++C به گوشتون خورده و می دونید این دو زبان از زبان های قدرتمند جهان هستنمن می خواهم شما را با کتابخانه ای شاید ناشناخته در این دو زبان اشنا کنم به نام conio.h که برای گرفتن ورودی و خروجی به صورت خاص است.این کتابخانه تقریبا در اکثر کامپایلر ها موجود است (turbo C++ , borland C ,......)خب اول کتابخانه را include می کنیم #include &lt;conio.h&gt;به همین راحتی.چگونه صفحه را پاک کنیم ؟clrscr();با صدا زدین این فانکشن تمام کنسول ما پاک خواهد شد چگونه فقط یک خط را پاک کنم ؟خیلی افراد با استفاده از چنین کد های (\e[1;1H\e[2J) و خروجی دادن ان ها و یا استفاده از r\ این کار را می کنند اما این روش ها معایبی هم دارد. پس چه کنی ؟ delline();به راحتی می توانید با استفاده از این تابع یک خط از کنسول را پاک کنیدچگونه یک کلید از کیبرد بگیریم ؟getch();&#xA;getche();&#xA;kbhit();-تابع اول یک کاراکتر را از کیبرد می گیرد و return می کند (مقدار برگشتی به نوع متغیر مربوط است توصیه می شود از int استفاده کنید) ولی این کد کاربرد دیگری نیز دارد بعضی افراد برای اینکه پس از پایان برنامه، برنامه در جا بسته نشود از getch و getchar در اخر کد استفاده می کنند-تابع دوم دقیقا مثل getch است با این تفاوت که مقدار دریافتی را در کنسول خروجی می دهد-تابع سوم چک می کند که ایا کلیدی فشورده شده است یا خیر ؟برای درک راحت تر به کد زیر توجه کنید:#include &lt;conio.h&gt;void main() {    while(1){        if(kbhit()){            if(getch() == 13){                break;            }        }    }}در اینجا برنامه در یک حلقه بینهایت در حال حرکت است و وقتی کلیدی فشار داده می شود چک می کند که ایا ان کلید (enter) بوده است یا خیر و اگر شرط برقرار بود برنامه از حلقه بیرون می ایدچگونه مکان cursor را تغییر دهیم !؟ یا متنی را در نقطه خاصی خروجی دهیمcursor حتما تا به حال متوجه این cursor  شده اید اما سوال اینجاست که چگونه می توان مکان ان را تغییر داد نکته : محل قرار گیری خروجی های کنسول همان cursor است پس با تغییر مکان ان مکان خروجی هم تغییر می کندgotoxy(x,y);درستور مکان cursor  را جا به می کند و دو ورودی x, y را از نوع int می گیردچگونه مکان فعلی cursor را بگیریم ؟wherex();wherey();کار با این ها بسیار ساده است به طوری که یک int را  return می کنداما میرسیم به بخش جذاب کتابخانهچگونه یک متن را چاپ کنیم ؟cprintf();شاید از خود بپرسید فرق این با printf چیست ؟ جواب این سوال این است که متن را  با پیکربندی ارائه می کند  یعنی به ان رنگ و حالت می دهدچگونه رنگ متن را تغییر دهیم ؟textcolor(a); این دستور یک int به نام a که مربوط به رنگ است را می گیرد مثال:(2 : سبز)چگونه رنگ پس زمینه متن را تغییر دهیم ؟textbackground(a);این نیز مثل مورد قبل یک متغیر عددی می گیرد نکته : در همه این موارد می توان از ثابت های پیش تعریف شده هم استفاده کرد مثال :(RED)چگونه هر دو را با هم تغییر بدیم ؟textattr(a);این هم مثل موارد قبل است ولی با فرق اینکه عدد روی همه عوامل تاثیر می گذارد یکی از  ثابت های پیش تعریف شده BLINK است که  متن را به حالت چشمک زن در می اوردبرای تمرین می تونید به راحتی چنین چیزی را مثل سیستم عامل داس بنویسیدhelp ms dosبنده با استفاده از همین کتاب خانه این بازی را ساختم اما به دلایلی نتوانستم کاملش کنمبازی این گونه است که سفینه ای حرکت می کند و تیر شکلیک می کند و باید اشیای را که میایند بزند تا بهش نرسند (بازی کامل نشده است)game by Cاین لینک GitHub اش  GitHub-khod-naderi/shatel:Simpleandengaginggamemadejustforfun😃Simpleandengaginggamemadejustforfun😃.Contributetokhod-naderi/shateldevelopmentbycreatinganaccountonGitHub.github.com خوشحال میشم تکمیلش کنید :)</description><category>علی نادری</category><author>علی نادری</author><pubDate>Tue, 26 Jan 2021 19:52:06 +0330</pubDate></item><item><title>تبدیل متن به صدا با پایتون</title><link>https://virgool.ir/@khod.naderi/تبدیل-متن-به-صدا-با-پایتون-gzmc7mgn4vrg</link><description>GTTS (Google Text-to-Speech)یک کتابخانه است که از ترجمه گوگل برای تبدیل متن به صدا استفاده می کند نصب کتابخانه pip install gtts -Uخب بریم سراغ آموزش، اول کتابخانه را اضافه می کنیم (توجه gtts کتابخانه کوچکی بوده و تنها دو فانکشن gTTs و gttserror را در خود دارد برای همین ما فقط gTTs را اضافه می کنیم)from gtts import gTTSخب خیلی ساده رشته مورد نظر را به gTTs می فرستیم و خروجی را در متغیری می ریزیمspeech = gTTs(&#34;Hello World&#34;)خب حالا می خواهیم خروجی را ذخیره کنیم speech.save(&#34;sound.mp3&#34;)orgTTs(&#34;Hello World&#34;).save(&#34;sound.mp3&#34;)در بالا دو روش مختلف را بیان کردیم یکی اینکه خروجی را داخل یک متغییر ریخته و بعد save را روی آن صدا بزنیم و دوم اینکه در همان خط save را صدا بزنیم tts (text_to_speech)یکی دیگر از کتابخانه های معروف در این زمینه tts است pip install text_to_speech -Uخب بعد از نصب آن را اضافه می کنیم (کتابخانه فقط یک فانکشن دارد)#import library&#xA;from text_to_speech import speakخب حالا به همین راحتی رشته را به کتابخانه می فرستیمspeak(&#34;hello&#34;)اما هنوز تمام نشدبا استفاده از متود lang می توانیم زبان را انتخاب کنیم speak(&#34;hello&#34;, lang=&#34;en&#34;)با استفاده از متود slow می توانیم سرعت را مشخص کنیم (false یعنی معمولی , True یعنی ارام)speak(&#34;hello&#34;, lang=&#34;en&#34;,  slow=True)همان طور که می بینید صدا بلا فاصله پخش می شود، با استفاده از save می توانیم بگوییم که خروجی ذخیره شودspeak(&#34;hello&#34;, lang=&#34;en&#34;, slow=True, save=True, file=&#34;filename .mp3&#34;)همان طور که می بینید متود file هم اضافه شده است، با استفاده از فایل می گوییم که خروجی را کجا و با چه اسم و فرمتی ذخیره کندpyttsx3به گفته یکی از دوستان (navid shaghozahi) از فارسی پشتیبانی میکنه و  اضافه شد :) [خودم اطلاعات دقیقی ندارم و سعی نکردم داکیومنت ها را کامل بخوانم پس مباحث کامل نیست]نصب کتابخانهpip install pyttsx3 -Uتبدیل متن به صدا import pyttsx3&#xA;engine = pyttsx3.init()&#xA;engine.say(&#34;Hello World&#34;)&#xA;engine.runAndWait()خط اول کتابخانه را وارد کردیمخط دوم engine را برابر با شی  pyttsx3.init() قرار دادیم خط سوم تابع say را صدا زدیم (برای تنظیم متن) و مقدار &#34;Hello World&#34; را بهش فرستادیمو در اخر با runAndWait() شی را اجرا می کنیمچگونه پیکربندی کنیمبرای گرفتن تنظیمات فعلی از .getProperty()استفاده می کنیم به این شکل که تنظیمات مورد نظر را بهش ارسال کنیم مثلا :volume = engine.getProperty(&#39;volume&#39;) برای گفتن ولم صدا است (کلمات دیگری ام هست مانند {rate, voices, ......} )برای تنظیم پیکربندی مورد نظر :.setProperty()به این شکل که مقدار مورد نظر و کلید واژه مربوطه را به تابع ارسال می کنیم مثلا :engine.setProperty(&#39;volume&#39;,1.0)که در اینجا ولم صدا را برابر 1.0 قرار دادیم (کلید واژه ها مانند مورد قبل است)ذخیره صداengine.save_to_file(&#39;Hello World&#39;, &#39;test.mp3&#39;)&#xA;engine.runAndWait()اسونه پس توضیح نمیدمتوجه : در لینوکس باید espeak و  ffmpeg نصب باشندشاد و پیروز باشید ;-) https://pyttsx3.readthedocs.io/en/latest/  https://pypi.org/project/pyttsx3/  https://pypi.org/project/gTTS/  https://pypi.org/project/text-to-speech/ </description><category>علی نادری</category><author>علی نادری</author><pubDate>Sat, 28 Nov 2020 17:28:39 +0330</pubDate></item></channel></rss>