فهرست مطالب:
- مرحله 1: تنظیم محیط خود
- مرحله 2: پرس و جو از API جستجو ناسا
- مرحله 3: شبکه عصبی تحول
- مرحله 4: پردازش تصویر
- مرحله 5: دوختن تصاویر با هم در یک طرح مستطیلی
- مرحله 6: اسکریپت کامل پایتون
- مرحله 7: برنامه الکترون
- مرحله 8: اعدام
تصویری: Planetarium شبکه عصبی با استفاده از Python ، Electron و Keras: 8 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
در این مقاله آموزشی ، من به شما نشان می دهم که چگونه با استفاده از پایتون و الکترون یک ژنراتور سه بعدی افقی خودکار نوشتم
ویدئوی بالا یکی از سیاره های تصادفی برنامه را نشان می دهد.
** توجه: این برنامه به هیچ وجه بی نقص نیست و در برخی نقاط نه خیلی پیتونیک. تشخیص شبکه عصبی فقط٪ 89 accurate دقیق است ، بنابراین برخی از تصاویر عجیب و غریب به سیاره زمین می رسد **
مشخصات
این افلاک از API ناسا برای تصاویر مربوط به فضا درخواست می کند و از یک شبکه عصبی متحرک برای تعیین اینکه آیا این تصویر برای پردازش مناسب است یا خیر ، استفاده می کند. سپس برنامه از OpenCV برای حذف پس زمینه از تصویر استفاده می کند و در نهایت تصاویر به هم متصل می شوند و به یک تصویر بزرگ مستطیلی تبدیل می شوند. سپس این تصویر ذخیره می شود و یک برنامه Electron Node.js تصویر را باز می کند و از بسته PhotoSphere.js برای مشاهده تصویر در قالب سه بعدی به سبک سیاره نما استفاده می کند.
وابستگی ها
پایتون:
- کراس
- بالش
- cv2
- آشفته
- درخواست ها
- urllib
- تصادفی
- زمان
- io
الکترون:
PhotoSphere
مرحله 1: تنظیم محیط خود
نصب Electron و Python
ابتدا ، مطمئن شوید که node.js و npm را نصب کرده اید (در غیر این صورت ، می توانید از اینجا بارگیری کنید)
در مرحله بعد ، شما باید Electron را نصب کنید. خط فرمان را باز کرده و دستور زیر را وارد کنید:
npm electron -g را نصب کنید
در مرحله بعد ، شما به پایتون نیاز دارید که می توانید آن را در اینجا بارگیری کنید
راه اندازی محیط مجازی
خط فرمان را باز کنید ، سپس دستورات زیر را برای تنظیم محیط مجازی خود وارد کنید:
pip نصب virtualenv
فضای virtualenv
فضای سی دی
scripts / activate
نصب وابستگی های پایتون
برای نصب وابستگی های پایتون ، این دستورات را در خط فرمان اجرا کنید:
pip instal keras
بالش نصب پیپ
pip install numpy
درخواست های نصب pip
pip نصب opencv-pythonاگر می خواهید خودتان شبکه را آموزش دهید ، مطمئن شوید که شتاب GPU را برای Keras تنظیم کرده اید
مرحله 2: پرس و جو از API جستجو ناسا
بررسی اجمالی
ناسا دارای API های کاربردی بسیار مفیدی است که می توانید در پروژه های خود از آنها استفاده کنید. برای این پروژه ، ما از API جستجو استفاده می کنیم که به ما امکان می دهد پایگاه داده تصاویر ناسا را برای تصاویر مربوط به فضا جستجو کنیم.
کد
ابتدا ، ما باید یک تابع پایتون را برای پذیرفتن آرگومانی که به عنوان عبارت جستجو عمل می کند ، تعریف کنیم:
def get_image_search (عبارت):
عبور
در مرحله بعد ، ما عبارت جستجو را به قالب URL تبدیل می کنیم ، سپس از کتابخانه درخواستها برای پرسیدن API استفاده می کنیم:
def get_image_search (عبارت):
params = {"q": urllib.parse.quote (arg)، "media_type": "image"} results = request.get ("https://images-api.nasa.gov/search"، params = params)
در نهایت ، مجموعه+JSON رشته ای را که API به ما برگردانده است رمزگشایی می کنیم و لیستی از پیوندها به تصاویر مربوط به عبارت جستجو را استخراج می کنیم:
def get_image_search (عبارت):
params = {"q": urllib.parse.quote (arg)، "media_type": "image"} results = request.get ("https://images-api.nasa.gov/search"، params = params) data = [result ['href'] for result in results.json () ["collection"] ["items"]
ما میرویم آنجا! ما در حال حاضر یک قطعه کد داریم که می تواند API جستجوی تصویر ناسا را جستجو کند و لیستی از پیوندها را به تصاویر مربوط به عبارت جستجوی ما بازگرداند.
مرحله 3: شبکه عصبی تحول
بررسی اجمالی
وظیفه شبکه عصبی این است که طبقه بندی کند که آیا تصویری از چیزی در فضا است یا نه. برای انجام این کار ، ما از یک شبکه عصبی کانولوشنال یا CNN برای انجام یک سری عملیات ماتریسی روی تصویر و تعیین میزان فضا y استفاده خواهیم کرد. من همه اینها را توضیح نخواهم داد ، زیرا نظریه های زیادی پشت آن وجود دارد ، اما اگر می خواهید در مورد شبکه های عصبی اطلاعات کسب کنید ، "مهارت یادگیری ماشین" را پیشنهاد می کنم.
کد
اول ، ما باید وابستگی های خود را وارد کنیم:
وارد کردن سیستم عامل
#رفع مشکل در حین حرکت قطار در GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "" وارد tensorflow به صورت tf اگر tf.test.gpu_device_name (): print ("GPU found") دیگری: چاپ ("GPU پیدا نشد") از keras.preprocessing.image واردات ImageDataGenerator از keras.proproining پردازش تصویر واردات از keras.models import Sequential from keras.layers import Conv2D ، MaxPooling2D from keras.layers import activation ، Dropout ، Flatten ، Dense from keras import backkend as K from PIL import image وارد کردن numpy به عنوان np
در مرحله بعد ما باید مدل خود را تعریف کنیم:
img_width، img_height = 1000، 500
train_data_dir = 'v_data/train' validation_data_dir = 'v_data/test' nb_train_samples = 203 nb_validation_samples = 203 epochs = 10 batch_size = 8 if K.image_data_format () == 'channel_first': input_shape =}، = (img_width، img_height، 3) model = Sequential () model.add (Conv2D (32، (2، 2)، input_shape = input_shape)) model.add (Activation ('relu')) model.add (MaxPooling2D (pool_size) = (2 ، 2))) model.add (Conv2D (32 ، (2 ، 2)))) model.add (فعال سازی ('relu')) model.add (MaxPooling2D (pool_size = (2 ، 2)))) مدل.add (Conv2D (64، (2، 2)))) model.add (فعال سازی ('relu')) model.add (MaxPooling2D (pool_size = (2، 2)))) model.add (Flatten ()) مدل add (Dense (64)) model.add (Activation ('relu')) model.add (Dropout (0.5)) model.add (Dense (1)) model.add (Activation ('sigmoid')) model.compile (ضرر = 'binary_crossentropy' ، optimizer = 'rmsprop' ، metrics = ['دقت'])
من مدل را برای شما آموزش داده ام ، اما اگر می خواهید مدل را خودتان ، بر اساس مجموعه داده خود آموزش دهید ، کد آموزشی را ضمیمه کرده ام. در غیر این صورت ، می توانید فایل HDF5 مدل آموزش دیده را بارگیری کنید. به دلیل محدودیت های فایل Instructables ، مجبور شدم نام آن را با پسوند ".txt" تغییر نام دهم. برای استفاده از آن ، نام فایل را به یک پسوند ".h5" تغییر دهید و آن را با این کد بارگذاری کنید:
model.load_weights ("model_saved.h5")
برای استفاده از شبکه برای پیش بینی فضای یک تصویر ، این تابع را تعریف می کنیم:
پیش بینی def (image_path):
img = image.load_img (image_path ، target_size = (1000 ، 500)) img = np.expand_dims (img، axis = 0) result = model.predict_classes (img) نتیجه بازگشت [0] [0]
مرحله 4: پردازش تصویر
بررسی اجمالی
برای پردازش تصویر ، از کتابخانه OpenCV (cv2) استفاده می کنم. ابتدا لبه های تصویر را تار می کنیم و سپس با ایجاد ماسک و تغییر مقادیر آلفا رنگهای تیره ، پس زمینه را حذف می کنیم.
کد
این قسمتی از تابع است که لبه ها را تار می کند:
def processImage (img):
RADIUS = 20 # بازکردن تصویر im = Image.open ("pilbuffer.png") # چسباندن تصویر در زمینه سفید diam = 2 * RADIUS back = Image.new ('RGB'، (im.size [0] + diam، im.size [1] + diam) ، (0 ، 0 ، 0)) back.paste (im، (RADIUS، RADIUS)) # ایجاد ماسک blur mask = Image.new ('L'، (im.size [0] + diam، im.size [1] + diam)، 255) blck = Image.new ('L'، (im.size [0] - diam، im.size [1] - diam)، 0) mask. paste (blck، (diam، diam)) # تصویر را تار کنید و لبه تار را با توجه به mask blur = back.filter (ImageFilter. GaussianBlur (RADIUS / 2)) back.paste (blur، mask = mask) back.save (" tranzition-p.webp
در مرحله بعد ، رنگهای تیره را روی شفاف قرار می دهیم و تصویر را موقتاً ذخیره می کنیم:
#ماسک ایجاد کنید و فیلتر را با آلفا جایگزین رنگ سیاه کنید
image = cv2.imread ("transfer.png") hMin = 0 sMin = 0 vMin = 20 hMax = 180 sMax = 255 vMax = 255 lower = np.array ([hMin، sMin، vMin]) above = np.array ([hMax، sMax، vMax]) hsv = cv2.cvtColor (image، cv2. COLOR_BGR2HSV) mask = cv2.inRange (hsv، bottom، above) output = cv2.bitwise_and (تصویر ، تصویر ، mask = mask) *_ ، alpha = cv2.split (output) dst = cv2.merge ((output ، alpha)) output = dst with open ("buffer.png"، "w+") as file: pass cv2.imwrite ("buffer.png"، output)
مرحله 5: دوختن تصاویر با هم در یک طرح مستطیلی
بررسی اجمالی
این تابع چندین تصویر می گیرد و آنها را به فرمی می چسباند که با استفاده از کتابخانه PIL (بالش) می تواند توسط بسته PhotoSphere.js تفسیر شود.
کد
اول ، ما باید تصویری ایجاد کنیم که بتواند به عنوان میزبان سایر تصاویر عمل کند:
new = Image.new ("RGBA" ، (8000 ، 4000) ، رنگ = (0 ، 0 ، 0))
در مرحله بعد ، ما باید از طریق آرایه تصاویر (که همه آنها در 1000x500 تغییر اندازه داده اند) تکرار کرده و آنها را در تصویر قرار دهیم:
h = 0
w = 0 i = 0 برای img در img_arr: new.paste (img، (w، h)، img) w += 1000 if w == 8000: h += 500 w = 0 i += 1
اکنون ما فقط این را در یک تابع که آرایه ای از تصاویر را به عنوان آرگومان خود گرفته و تصویر جدید را برمی گرداند ، جمع بندی می کنیم:
def stitch_beta (img_arr):
new = Image.new ("RGBA"، (8000، 4000)، color = (0، 0، 0)) h = 0 w = 0 i = 0 for img in img_arr: new.paste (img، (w، h) ، img) w += 1000 اگر w == 8000: h += 500 w = 0 i += 1 بازگشت جدید
مرحله 6: اسکریپت کامل پایتون
این اسکریپت شبکه عصبی پایتون کامل است که به صورت net.py ذخیره شده و به اسکریپت اصلی وارد می شود:
# وارد کردن کتابخانه ها
import os #رفع مشکل در هنگام حرکت قطار در GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "وارد کردن tensorflow به عنوان tf if tf.test.gpu_device_name (): print (" GPU found ") دیگر: چاپ (" GPU یافت نشد ") از keras.preprocessing.image واردات ImageDataGenerator از keras. پردازش تصویر واردات از keras.models واردات پی در پی از keras.layers واردات Conv2D ، MaxPooling2D از keras.layers واردات فعال سازی ، Dropout ، Flatten ، Dense از keras واردات پسوند به صورت K از PIL import image import numpy as np img_width، img_height = 1000، 500 train_data_dir = 'v_data/train' validation_data_dir = 'v_data/test' nb_train_samples = 203 nb_validation_samples = 203 epochs = 10 batch_size = 8 = 'if': input_shape = (3 ، img_width ، img_height) دیگر: input_shape = (img_width، img_height، 3) model = Sequential () model.add (Conv2D (32، (2، 2)، input_shape = input_shape)) model.add (فعال سازی ('relu'))) model.add (MaxPooling2D (pool_size = (2، 2))) model.add (Conv2D (32، (2، 2))) مدل. add (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2، 2))) model.add (Conv2D (64، (2، 2))) model.add (فعال سازی ('relu')) model.add (MaxPooling2D (pool_size = (2 ، 2))) model.add (مسطح ()) model.add (متراکم (64)) model.add (فعال سازی ('relu')) model.add (خروج (0.5))) model.add (متراکم (1)) model.add (فعال سازی ('sigmoid')) model.compile (loss = 'binary_crossentropy'، optimizer = 'rmsprop'، metrics = ['دقت']) model.load_weights ("model_saved.h5") def pred (image_path): img = image.load_img (image_path، target_size = (1000، 500)) img = np.expand_dims (img، axis = 0) result = model.predict_classes (img) نتیجه برگشتی [0] [0]
این فایل اصلی پایتون ، api.py است:
درخواست های واردات ، sys ، random ، urllib.parse ، cv2
از PIL import Image، ImageFilter from io import BytesIO import numpy as np import net def get_image_search (num، phrase): count = 0 img_arr = برای arg در عبارت: print (arg) print (f "تعداد تصویر فعلی: {count } ") i = 0 params = {" q ": urllib.parse.quote (arg)،" media_type ":" image "} results = request.get (" https://images-api.nasa.gov/search "، params = params) data = [result ['href'] for result in results.json () [" collection "] [" items "] print (len (data)) if num> len (data): num = len (داده) هنگام شمارش
مرحله 7: برنامه الکترون
بررسی اجمالی
ما یک برنامه الکترون ساده ایجاد می کنیم که فقط عنصر PhotoSphere را موقعیت دهی و بارگذاری می کند. فایلهای main.js و package.json مستقیماً از وب سایت Electron هستند و HTML نسخه کمی اصلاح شده HTML است که در وب سایت PhotoSphere ارائه شده است. من فایلها را وارد کرده ام ، اما همه آنها را به.txt تغییر نام دادم ، زیرا Instructables این نوع فایلها را مجاز نمی داند. برای استفاده از فایل ها ، نام آنها را با پسوند مناسب تغییر دهید.
کد
main.js
const {app، BrowserWindow} = نیاز ('electron')
function createWindow () {const win = new BrowserWindow ({عرض: 800 ، ارتفاع: 600 ، webPreferences: {nodeIntegration: true}}) win.loadFile ('index.html')} app.whenReady (). سپس (createWindow) app.on ('window-all -losed'، () => {if (process.platform! == 'darwin') {app.quit ()}}) app.on ('activ'، () => {if (BrowserWindow.getAllWindows (). length === 0) {createWindow ()}})
package.json
{
"name": "space" ، "version": "0.1.0" ، "main": "main.js" ، "scripts": {"start": "electron." }}
index.html
مرحله 8: اعدام
ایجاد تصویر مستطیل شکل
برای ایجاد تصویر ، اسکریپت api.py را در خط فرمان اجرا کرده و محیط مجازی آن فعال شده است:
api.py
پس از پایان اجرای اسکریپت ها ، برنامه الکترون را با استفاده از:
شروع npmوویلا! افلاک نما شما فعال است! ممنون که خواندید:)
توصیه شده:
بیدار شدن در شبکه LAN هر رایانه ای از طریق شبکه بی سیم: 3 مرحله
Wake on LAN Any Computer over Wireless Network: این آموزش دیگر به دلیل تغییرات در تصویر Raspbpian دیگر به روز نیست. لطفاً آموزش به روز شده را اینجا دنبال کنید: https://www.instructables.com/id/Raspberry-Pi-As-Wake-on-LAN-ServerWOL امروزه تقریباً در تمام پورت های اترنت وجود دارد. این نیست
ساخت سیستم عصبی سازی "Worlds Simplest" (مردان در حافظه مشکی پاک کن): 10 مرحله (همراه با تصاویر)
ساخت عصبی "Worlds Simplest" (مردان در حافظه پاک کن سیاه): آیا فقط در چند روز به یک مهمانی لباس می روید ، اما هنوز لباس ندارید؟ پس این ساخت برای شماست! این عینک با عینک آفتابی و کت و شلوار مشکی ، لباس مردان سیاه پوش شما را تکمیل می کند. این بر اساس ساده ترین مدار الکترونیکی ممکن است
تحریک کننده عصبی چند زبانه: 10 مرحله
عصب گیر عصبی چند زبانه: این پروژه توسط مارک از نوا اسکوشیا سفارش داده شده است. هزینه آن 471.88 دلار آمریکا بوده و طراحی و ساخت آن 66.5 ساعت به طول انجامیده است. دو عکس بالا با جعبه پلاستیکی مربوط به تکرار دوم (محرمانه) دستگاه است که توسط یکی از دوستان سفارش داده شده است
آیا این یک دست است؟ (دوربین رزبری پای + شبکه عصبی) قسمت 1/2: 16 مرحله (همراه با تصاویر)
آیا این یک دست است؟ (دوربین رزبری پای + شبکه عصبی) قسمت 1/2: چند روز پیش ، من در ورزشگاه مچ دست راست خود را مجروح کردم. بعداً هر بار که از ماوس کامپیوترم استفاده می کردم ، به دلیل زاویه تند مچ درد زیادی ایجاد می کرد. آن موقع بود که به من ضربه زد & quot؛ عالی نخواهد بود اگر بتوانیم هر سطحی را به تله تبدیل کنیم
ربات شبکه عصبی آردوینو: 21 مرحله (همراه با تصاویر)
ربات شبکه عصبی آردوینو: این دستورالعمل بر اساس سری 3 قسمتی است که من برای Make YouTube Channel تهیه کرده ام و به شما نشان می دهد که چگونه دقیقاً نمونه اولیه ، طراحی ، مونتاژ و برنامه ریزی ربات شبکه عصبی آردوینو خود را انجام دهید. پس از تماشای کامل سریال ، باید بهتر باشید