کار با opencv در گوشی

saalek110

Well-Known Member
کار با opencv در گوشی


جامپ کنید به پست شماره ۶ ، که برای ۲۰۲۶ است...پست ۵ را هم در سال ۲۰۲۶ نوشتم. بخوانیدش.
پستهای قبل پست ۶ را می توانید ندیده بگیرید.
 
آخرین ویرایش:

saalek110

Well-Known Member

Opencv image process
دقیقا نمی دونم نرم افزار فوق چیه....فیلم می گیره و در پایین دستگیره هایی داره که میشه پارامترهایی را تغییر داد و نمای دوربین تغییر می کند.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: یک راه اینه در کامپیوتر اپلیکیش اندرویدی بسازیم. و apk حاصل را روی گوشی نصب کنیم. راه دوم نوشتن کد در نرم افزارهایی مثل pydroid 3 است.در این پست هوش مصنوعی chatgpt این دو روش را مقایسه کرده:



۱️⃣ ساخت اپلیکیشن اندرویدی واقعی (Android Studio + NDK + OpenCV)
فواید:
خروجی APK نصب‌شدنی روی گوشی
دسترسی کامل به دوربین، فایل‌ها، حسگرها و منابع سیستم
پردازش سریع‌تر با C++ و NDK
قابلیت انتشار و حرفه‌ای بودن اپ
مناسب پروژه‌های صنعتی و بینایی ماشین روی موبایل
معایب:
کدهای کامپایل شده بعد از نصب روی گوشی قابل تغییر نیستند
برای تغییر یا اصلاح، باید سورس روی کامپیوتر ویرایش و دوباره Build شود
پیچیده‌تر است، نیازمند دانش Java/Kotlin و C++ و NDK
۲️⃣ نوشتن کد OpenCV روی گوشی (Python / Pydroid / Termux)
فواید:
تغییر کد و تست الگوریتم‌ها در لحظه و روی گوشی امکان‌پذیر است
مناسب آموزش، یادگیری و آزمایش سریع الگوریتم‌ها
محیط ساده و سبک برای تست‌های سریع
معایب:
اپ نصب‌شدنی مستقل نیست (فقط داخل همان برنامه اجرا می‌شود)
دسترسی کامل به سخت‌افزار و منابع سیستم محدود است
سرعت اجرای کد کمتر از اپ واقعی است
رابط کاربری حرفه‌ای ندارد
جمع‌بندی مهندسی
اگر هدفت اپ حرفه‌ای، سریع و مستقل روی موبایل است → برو سمت Android Studio + NDK
اگر هدفت آزمایش سریع الگوریتم و یادگیری لحظه‌ای است → از Pydroid / Python استفاده کن
برای پروژه‌های جدی، معمولاً ابتدا روی Python الگوریتم را تست می‌کنیم، بعد آن را به اپ اندرویدی منتقل می‌کنیم
 
آخرین ویرایش:

saalek110

Well-Known Member
پستهای قبلی را فراموش کنید، بروید اینجا


نسخه مناسب دستگاه خودتون را و اون بسته پایینی را دانلود کنید.

بعدش سه تا چیز دارید که باید نصب کنید
اولی pydroid 3 است
و دومی pydroid repository plugin
سومی هم اسمش Pydroid-Permissions-Plugin-2.3(www.farsroid.com) است.



برای نصب opencv ، از منوی برنانه pydroid 3 ، اول بروید به pip
بعد در قسمت اینستال بنویسید opencv-python و تیک زیرش را هم بزارید باشه ، یعنی تیک prebuild ....را.

بعد دکمه نصب را بزنید تا نصب بشه.


هوش مصنوعی deepseek میگه این را هم می تونی بزنی. خط زیری را ببینید.

opencv-contrib-python

· محتوا: ماژول‌های اصلی به‌علاوه ماژول‌های اضافی (contrib).

سالک: ولی من opencv-python را زدم ولی contrib هم در بعضی برنامه ها استفاده شده. شاید بهتر باشه دومی را بزنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
مثل نصب قبلی یعنی نصب opencv
باز بروید منو و pip را بزنید و بروید صفحه اینستال و Matplotlib را نصب کنید. تیک prebuild بازم باقی بماند.
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه زیر را بیاندازید در ادیتور و دکمه زرد پایین و راست را بزنید تا play شود.


Python:
import cv2
import numpy as np
import matplotlib.pyplot as plt

print("️ برنامه ساخت و نمایش تصویر - ویژه Pydroid 3")
print("=" * 50)

# 1. ساخت یک تصویر جذاب‌تر
height, width = 400, 600
img = np.zeros((height, width, 3), dtype=np.uint8)

# پس‌زمینه گرادیان آبی
for x in range(width):
    intensity = int((x / width) * 200)
    img[:, x] = [200 - intensity, 100 + intensity, 50 + intensity]

# 2. اضافه کردن شکل‌های هندسی
# ستاره زرد
star_points = np.array([
    [300, 100], [320, 160], [380, 160],  # نقاط ستاره
    [330, 200], [350, 260], [300, 225],
    [250, 260], [270, 200], [220, 160],
    [280, 160]
])
cv2.fillPoly(img, [star_points], (0, 255, 255))  # زرد

# الگوی دایره‌های توخالی
for i in range(5):
    radius = 30 + i * 15
    cv2.circle(img, (150, 300), radius, (255, 255, 255), 2)

# 3. اضافه کردن متن
texts = [
    ("OpenCV + Pydroid 3", (180, 50)),
    ("اندروید", (280, 350)),
    ("Matplotlib Display", (200, 380))
]

for text, position in texts:
    cv2.putText(img, text, position, cv2.FONT_HERSHEY_SIMPLEX,
                0.7, (255, 255, 255), 2)

# 4. ذخیره تصویر
filename = 'my_design.png'
cv2.imwrite(filename, img)
print(f"✅ تصویر ساخته شد: {filename}")
print(f" ابعاد: {width}x{height} پیکسل")
print(f" عمق رنگ: {img.dtype}")
print("-" * 50)

# 5. نمایش با matplotlib - راه‌حل اصلی برای اندروید
# تبدیل BGR به RGB برای نمایش صحیح
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.figure(figsize=(10, 7))
plt.imshow(img_rgb)
plt.title('نمایش تصویر در Pydroid 3\n(با Matplotlib)',
          fontsize=16, fontweight='bold', pad=20)
plt.axis('off')

# اضافه کردن توضیحات پایین تصویر
plt.figtext(0.5, 0.01,
           f'فایل ذخیره شده: {filename} | ابعاد: {width}×{height}',
           ha='center', fontsize=10, style='italic')

plt.tight_layout()
plt.show()

print(" تصویر با موفقیت نمایش داده شد!")
print("\n برای مشاهده فایل ذخیره شده:")
print("1. به منوی 'File' در Pydroid بروید")
print("2. فایل 'my_design.png' را پیدا کنید")
print("3. روی آن کلیک کنید تا باز شود")

برنامه را من اجرا کردم. اجرا شد. اون Matplotlib گویا برای نمایش است. برای همین در پست قبل نصبش کردیم. در pydroid ۳ یک محدودیتی در نمایش داشت که با Matplotlib برطرف کردیم.

نتیجه اجرا ، عکس زیر:

Screenshot_۲۰۲۶-۰۲-۰۹_۱۸۲۸۱۲.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه بالا طولانی است ، در پست بعدی یک برنانه ساده می زنم.
 

saalek110

Well-Known Member
برنامه رسم دایره و نوشتن یک متن:


کد:
import cv2
import numpy as np
import matplotlib.pyplot as plt

# ساخت تصویر
img = np.ones((300, 500, 3), dtype=np.uint8) * 255

# دایره
cv2.circle(img, (250, 150), 80, (0, 0, 255), 3) # قرمز

# متن
cv2.putText(img, "Circle + Text", (150, 280),
            cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 0), 2)

# نمایش با matplotlib (برای Pydroid)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis('off')
plt.show()

cv2.imwrite('output.png', img)
print("✅ Image saved as 'output.png'")

نتیجه اجرا ، عکس زیر:
Screenshot_۲۰۲۶-۰۲-۰۹_۱۸۳۲۰۷.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
Deepseek در مورد pydroid 3 :

برای تجربه‌ای روان‌تر و دسترسی کامل به فایل‌های دستگاه توصیه می‌شود دو پلاگین اصلی برنامه را نیز نصب کنید:

· Pydroid Repository: فرآیند نصب خودکار کتابخانه‌ها را ساده‌تر می‌کند.
· Pydroid Permissions Plugin: دسترسی برنامه به حافظه دستگاه برای ذخیره‌سازی پروژه‌ها را فراهم می‌آورد.
 

saalek110

Well-Known Member
سالک: این تاپیک برای opencv است ولی pydroid ۳ برای کدنویسی پایتون است و بازی هم میشه درش ساخت......
نظر هوش مصنوعی deepseek :

بله، در Pydroid 3 امکان ساخت بازی وجود دارد. این برنامه از کتابخانه‌های بازیسازی محبوبی مانند Pygame، Kivy و PyQt5 پشتیبانی می‌کند و می‌توانید با آنها بازی بنویسید. اما قبل از شروع، لازم است چند نکته مهم را بدانید.

برای اینکه اطلاعات کلیدی را راحت‌تر ببینید، خلاصه‌ای از وضعیت بازی‌سازی در Pydroid 3 و نکات مهم آن در ادامه آمده است.

✅ پشتیبانی از کتابخانه‌های بازیسازی

Pydroid 3 به‌طور مستقیم از Pygame 2 (برای بازی‌های دو بعدی)، Kivy (برای رابط کاربری چند پلتفرمی) و PySide6 (نسخه Qt برای پایتون) پشتیبانی می‌کند. این کتابخانه‌ها معمولاً از طریق مدیریت بسته درون برنامه (Pip) قابل نصب هستند.

⚠️ محدودیت‌ها و نکات مهم

· نمایش و تست فقط در خود برنامه: شما می‌توانید کد بازی را اجرا و نتیجه آن را در محیط خود Pydroid 3 مشاهده کنید. اما Pydroid 3 یک کامپایلر یا IDE است، نه یک سازنده پکیج اندرویدی. بنابراین امکان ساخت فایل نصبی مستقل (APK) برای نصب بازی روی گوشی دیگر در این برنامه وجود ندارد.
· نسخه رایگان در مقابل پولی: برخی از قابلیت‌های پیشرفته مانند پیش‌بینی کد (Code Prediction) که کدنویسی را سریع‌تر می‌کند، فقط در نسخه پولی (Premium) برنامه در دسترس هستند.
· محدودیت سخت‌افزاری گوشی: ساخت بازی‌های سه‌بعدی پیچیده یا با گرافیک سنگین ممکن است به دلیل محدودیت‌های قدرت پردازش و حافظه گوشی‌های موبایل، تجربه روانی نداشته باشد. بهتر است بر روی بازی‌های دوبعدی ساده یا متوسط تمرکز کنید.

برای نوشتن اولین بازی خود با Pygame، یک کد بسیار ساده وجود دارد که شما را با پایه‌ها آشنا می‌کند:

```python
import pygame
pygame.init()
# تنظیم صفحه نمایش و سایر کدهای اصلی بازی
```

اگر این کد ساده را در Pydroid 3 اجرا کنید، یک پنجره گرافیکی باز می‌شود و می‌توانید منطق بازی را توسعه دهید. برای شروع، تمرکز روی بازی‌های کلاسیک دوبعدی مانند Snake یا Flappy Bird انتخاب خوبی است که منابع آموزشی زیادی دارند.

گزینه‌های جایگزین برای ساخت مستقل APK

اگر هدف اصلی شما ساخت یک فایل APK برای انتشار یا نصب بازی روی دستگاه‌های مختلف است، باید ابزارهای دیگری را به‌کار گیرید. دو گزینه متداول برای انجام این کار روی رایانه (و نه در محیط موبایل) عبارتند از:

· Buildozer: یک ابزار رایگان است که پروژه‌های پایتون (مخصوصاً مبتنی بر Kivy) را به APK اندرویدی تبدیل می‌کند.
· Google Colab: می‌توانید از فضای ابری رایگان گوگل برای کامپایل کدهای پایتون و ساخت APK استفاده کنید.

اگر بخواهید تمام مراحل توسعه بازی را فقط روی گوشی موبایل انجام دهید و به APK برسید، چالش بسیار بزرگی در پیش دارید. برخی کاربران تجربه موفق‌آمیزی با ترکیب Pydroid 3 برای نوشتن کد و ترمینال ترمکس (Termux) برای اجرای دستورات پیشرفته گزارش کرده‌اند، اما این مسیر پیچیده است و برای مبتدیان توصیه نمی‌شود.

توصیه‌هایی برای شروع

1. با پروژه‌های کوچک شروع کنید: ابتدا یک بازی ساده (مثلاً حدس عدد) را فقط با رابط متنی (Console) پیاده‌سازی کنید تا با منطق پایه آشنا شوید.
2. گرافیک را اضافه کنید: در مرحله بعد، از کتابخانه Pygame برای افزودن گرافیک ساده به همان پروژه استفاده کنید.
3. منابع آموزشی را دنبال کنید: از آموزش‌های آنلاین یا کتاب‌های مخصوص بازیسازی با پایتون و Pygame کمک بگیرید.

جمع‌بندی: Pydroid 3 محیط مناسبی برای آموزش، تمرین و نمونه‌سازی اولیه بازی با پایتون روی گوشی است، اما نه برای ساخت نسخه نهایی قابل نصب. برای این منظور، باید سراغ ابزارهای تخصصی‌تر روی رایانه بروید.

اگر یک ایده مشخص برای بازی‌تان دارید (مثلاً نوع بازی یا کتابخانه مد نظر)، خوشحال می‌شوم راهنمایی دقیق‌تری کنم.
 

saalek110

Well-Known Member
یک نمونه بازی که یک مربع قرمز رسم می کند:

Python:
import pygame
import sys

# مقداردهی اولیه Pygame
pygame.init()

# تنظیمات پنجره بازی
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("بازی مربع متحرک - کنترل با کلیدهای جهت‌دار")

# رنگ‌ها
RED = (255, 0, 0)
BLUE = (0, 120, 255)
BACKGROUND = (20, 20, 30)

# مشخصات مربع بازیکن
square_size = 50
player_x = WIDTH // 2 - square_size // 2
player_y = HEIGHT // 2 - square_size // 2
speed = 7

# حلقه اصلی بازی
clock = pygame.time.Clock()
running = True

while running:
    # مدیریت رویدادها (مانند بستن پنجره)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
   
    # دریافت وضعیت کلیدهای فشرده شده
    keys = pygame.key.get_pressed()
    if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
        player_x += speed
    if keys[pygame.K_LEFT] or keys[pygame.K_a]:
        player_x -= speed
    if keys[pygame.K_DOWN] or keys[pygame.K_s]:
        player_y += speed
    if keys[pygame.K_UP] or keys[pygame.K_w]:
        player_y -= speed
   
    # جلوگیری از خروج مربع از مرزهای پنجره
    player_x = max(0, min(WIDTH - square_size, player_x))
    player_y = max(0, min(HEIGHT - square_size, player_y))
   
    # رسم گرافیک
    screen.fill(BACKGROUND)  # پس‌زمینه
    pygame.draw.rect(screen, RED, (player_x, player_y, square_size, square_size))  # مربع بازیکن
   
    # به‌روزرسانی نمایش
    pygame.display.flip()
    clock.tick(60)  # محدود کردن نرخ فریم به 60 فریم بر ثانیه

pygame.quit()
sys.exit()
 

saalek110

Well-Known Member
چگونه در Pydroid 3 اجرا کنیم؟

1. نصب Pygame: ابتدا مطمئن شوید کتابخانه Pygame نصب است. در Pydroid 3، به منوی نوار ابزار پایین بروید، روی آیکون Pip کلیک کنید و در کادر جستجو pygame را تایپ و آن را نصب کنید.
2. ایجاد فایل جدید: یک فایل جدید پایتون (مثلاً my_game.py) ایجاد کنید.
3. کپی و اجرا: کد بالا را در فایل کپی کرده و دکمه اجرا (Run) را بزنید.

کنترل بازی

· از کلیدهای جهت‌دار (↑, ↓, ←, →) روی صفحه‌کلید مجازی Pydroid استفاده کنید.
· یا از کلیدهای W, A, S, D (که در کد پشتیبانی شده‌اند) برای حرکت استفاده کنید.
· مربع قرمز نباید از مرزهای پنجره خارج شود.

برای توسعه و جذاب‌تر کردن بازی

می‌توانید این ایده‌ها را به کد اضافه کنید:

ایده توسعه چگونه پیاده‌سازی کنیم؟
اضافه کردن دشمن یک مربع آبی دیگر با موقعیت تصادفی ایجاد کنید که به سمت بازیکن حرکت کند.
جمع‌آوری امتیاز دایره‌های زرد (سکه) روی صفحه قرار دهید و با برخورد مربع به آن‌ها امتیاز جمع کنید.
شمارنده امتیاز با ماژول pygame.font امتیاز را روی صفحه نمایش دهید.
موانع ثابت چند مستطیل به عنوان دیوار رسم کنید و حرکت بازیکن را در برخورد با آن‌ها محدود کنید.
افزایش سرعت با جمع‌آوری هر ۵ سکه، سرعت حرکت بازیکن یا دشمن کمی افزایش یابد.

کد بالا یک نقطه شروع عالی است. برای پیاده‌سازی هرکدام از این قابلیت‌ها یا اگر سوال دیگری دارید،بپرسید.
 

saalek110

Well-Known Member
سالک: ولی این تاپیک برای ساخت بازی نیست و بر می گردیم به کار پردازش تصویر.
 

saalek110

Well-Known Member
مسیر پوشه فایلها


import os

# مسیر فولدری که این فایل پایتون در آن قرار دارد
print("مکان فعلی فایل کد:", os.getcwd())

# (اختیاری) لیست همه فایل‌های این پوشه
print("\nفایل‌های موجود در این پوشه:")
for file in os.listdir("."):
print(file)

Python:
import os

# مسیر فولدری که این فایل پایتون در آن قرار دارد
print("مکان فعلی فایل کد:", os.getcwd())

# (اختیاری) لیست همه فایل‌های این پوشه
print("\nفایل‌های موجود در این پوشه:")
for file in os.listdir("."):
    print(file)

سعی کنید از داخل تگ کد ، کپی بگیرید ، چون اگر بالایی را کپی بگیرید، تورفتگی به هم می ریزد و برای اصلاحش ، خط بعد از خط for ، یعنی print را ۴ تا space بزنید برود جلو.

نتیجه اجرا:


کد:
مکان فعلی فایل کد: /storage/emulated/0/Android/data/ru.iiec.pydroid3/files

فایل‌های موجود در این پوشه:
my_design.png

[Program finished]
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه آسمان شب ، ماه دایره ای و ستاره ها را رسم می کند.

Python:
# یک سورپرایز ساده

import cv2

import numpy as np

# یک آسمان شب زیبا می‌سازیم

sky = np.zeros((300, 500, 3), dtype=np.uint8)

sky[:,:] = [10, 20, 40] # آبی تیره

# ستاره‌های تصادفی

for _ in range(50):

    x = np.random.randint(0, 500)

    y = np.random.randint(0, 300)

    cv2.circle(sky, (x, y), 2, (255, 255, 200), -1)

# ماه

cv2.circle(sky, (400, 80), 30, (240, 240, 200), -1)

# متن

cv2.putText(sky, "Good Night!", (150, 150),

            cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)


cv2.imwrite("night_sky.png", sky)

print("✅ آسمان شب ساخته شد: night_sky.png")

print(" فردا بیشتر کدهای باحال یاد می‌گیریم!")
 

saalek110

Well-Known Member
برنامه ای که یک فایل عکس می سازد ، شکلهایی در عکس رسم کرده ، شامل مربع قرمز.... فایل را ذخیره می کند......

و بعد مجدد فایل را می خواند و مربع قرمز را در عکس پیدا می کند:

Python:
import cv2
import numpy as np
import matplotlib.pyplot as plt

print("=" * 50)
print(" برنامه تشخیص مربع قرمز - نسخه Pydroid 3")
print("=" * 50)

# ========================
# قسمت 1: ساخت تصویر با مربع قرمز
# ========================

# ایجاد تصویر سفید
width, height = 600, 400
background_color = (255, 255, 255) # سفید
img = np.full((height, width, 3), background_color, dtype=np.uint8)

# مشخصات مربع قرمز
square_color = (0, 0, 255) # قرمز در مدل BGR
square_thickness = -1 # پر شده
square_size = 120
start_x, start_y = 200, 120 # موقعیت گوشه بالا-چپ

# کشیدن مربع قرمز
end_x = start_x + square_size
end_y = start_y + square_size
cv2.rectangle(img, (start_x, start_y), (end_x, end_y), square_color, square_thickness)

# اضافه کردن چند شکل دیگر برای چالش بیشتر
cv2.circle(img, (450, 300), 60, (255, 0, 0), -1) # دایره آبی
cv2.rectangle(img, (50, 250), (150, 350), (0, 255, 0), -1) # مربع سبز
cv2.putText(img, "Find Red Square", (180, 50),
            cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)

# ذخیره تصویر
filename = "image_with_red_square.png"
cv2.imwrite(filename, img)
print(f"✅ تصویر ساخته و ذخیره شد: {filename}")
print(f" مربع قرمز در موقعیت: X={start_x}, Y={start_y}")

# نمایش تصویر ساخته شده با matplotlib
plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title("تصویر ساخته شده")
plt.axis('off')

# ========================
# قسمت 2: خواندن و پردازش تصویر
# ========================

print("\n در حال پردازش تصویر برای تشخیص مربع قرمز...")

# خواندن همان فایل ذخیره شده
loaded_img = cv2.imread(filename)

if loaded_img is None:
    print("❌ خطا: تصویر بارگذاری نشد!")
    exit()

# تبدیل از BGR به HSV (برای تشخیص رنگ بهتر)
hsv_img = cv2.cvtColor(loaded_img, cv2.COLOR_BGR2HSV)

# تعریف محدوده رنگ قرمز در HSV
lower_red1 = np.array([0, 70, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 70, 50])
upper_red2 = np.array([180, 255, 255])

# ایجاد ماسک‌های قرمز
mask1 = cv2.inRange(hsv_img, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_img, lower_red2, upper_red2)
red_mask = mask1 + mask2

# بهبود ماسک با مورفولوژی
kernel = np.ones((5, 5), np.uint8)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_CLOSE, kernel)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)

# پیدا کردن کانتورها
contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# تصویر برای نمایش نتیجه
result_img = loaded_img.copy()
detected_squares = []

print(f"\n تعداد مناطق قرمز شناسایی شده: {len(contours)}")

# بررسی هر کانتور
for i, contour in enumerate(contours):
    x, y, w, h = cv2.boundingRect(contour)
    area = cv2.contourArea(contour)
   
    if area > 500:
        aspect_ratio = float(w) / h if h != 0 else 0
       
        if 0.8 <= aspect_ratio <= 1.2:
            # کشیدن مستطیل سبز دور مربع شناسایی شده
            cv2.rectangle(result_img, (x, y), (x + w, y + h), (0, 255, 0), 3)
           
            # نوشتن متن روی مربع
            cv2.putText(result_img, f"Square {len(detected_squares)+1}",
                       (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
           
            # نمایش اطلاعات در کنسول
            print(f"\n✅ مربع قرمز {len(detected_squares)+1} شناسایی شد:")
            print(f" موقعیت: X={x}, Y={y}")
            print(f" اندازه: {w}x{h} پیکسل")
            print(f" مساحت: {int(area)} پیکسل مربع")
            print(f" نسبت ابعاد: {aspect_ratio:.2f}")
           
            detected_squares.append((x, y, w, h))

# ========================
# قسمت 3: نمایش نتایج با matplotlib
# ========================

plt.subplot(1, 2, 2)
result_rgb = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)
plt.imshow(result_rgb)
plt.title("نتیجه تشخیص")
plt.axis('off')

plt.tight_layout()
plt.show()

# ذخیره نتیجه
cv2.imwrite("detected_squares.png", result_img)

if detected_squares:
    print(f"\n در مجموع {len(detected_squares)} مربع قرمز شناسایی شد!")
    print(f"\n تصویر نتیجه ذخیره شد: detected_squares.png")
   
    print("\n" + "=" * 50)
    print("مقایسه با مربع اصلی:")
    print(f"مربع رسم شده: X={start_x}, Y={start_y}")
    print(f"مربع شناسایی شده: X={detected_squares[0][0]}, Y={detected_squares[0][1]}")
   
    # دقت تشخیص
    error_x = abs(detected_squares[0][0] - start_x)
    error_y = abs(detected_squares[0][1] - start_y)
    print(f"خطای تشخیص: X±{error_x}, Y±{error_y} پیکسل")
   
else:
    print("❌ هیچ مربع قرمزی شناسایی شد!")

print("\n" + "=" * 50)
print("برنامه با موفقیت به پایان رسید!")
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه استفاده از دوربین گوشی:

Python:
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# راه‌اندازی دوربین
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)

print(" دوربین فعال شد...")
print("برای خروج: برنامه رو ببندید")

# ایجاد figure برای matplotlib
fig, ax = plt.subplots()
img_display = ax.imshow(np.zeros((240, 320, 3), dtype=np.uint8))
ax.axis('off')
plt.tight_layout()

def update(frame):
    ret, frame = cap.read()
    if ret:
        # پردازش ساده (تبدیل به خاکستری)
        processed = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # تبدیل BGR به RGB
        img_display.set_data(processed)
    return [img_display]

# انیمیشن برای آپدیت مداوم
ani = FuncAnimation(fig, update, interval=50, blit=True)
plt.show()

# وقتی پنجره بسته شد
cap.release()
print("✅ دوربین آزاد شد")
 

جدیدترین ارسال ها

بالا