Bu repository Arduino ile geliştirilen akıllı mama kabından alınan veriyi makine öğrenmesi modelleri ile işleyip çıktıları mobil uygulamanın kullanmasını sağlayan API yı barındırmaktadır. Kullanılan makine öğrenmesi modelleri models klasörünün altında bulunmaktadır. Modellerin nasıl oluşturulduğu ile ilgili detaylı bilgiyi AI repository'sinde bulabilirsiniz.
Django Rest Framework ile geliştirildi. Şuan Google App Engine ile deploy edilmiş olup https://dirty-paws.ey.r.appspot.com/ adresinde ulaşılabilir durumdadır.
Akıllı mama kabından POST request olarak gönderilen ağırlık bilgisine göre kaptaki mamanın bitmesine kalan tahmini zamanı hesaplamamıza yarar
Örnek POST REQUEST
{
"id": 1,
"Food_Amount_gr": 702.0,
"Location_Id": 1,
"Longitude": 35.11337,
"Latitude": 33.933439,
"Prediction": null
}
Örnek GET REQUEST
{
"id": 1,
"Food_Amount_gr": 702.0,
"Location_Id": 1,
"Longitude": 35.11337,
"Latitude": 33.933439,
"Prediction": 11.995214285714287
}
Kullanıcıların yaptığı acil durum bildirimlerinin yönetimi burada sağlanır.
Örnek POST/GET REQUEST
{
"id": 2,
"message": "\"Kediye araba çarptı yetişin\"",
"owner_id": 2,
"user_id": null,
"status": 1,
"image": null,
"Location_Id": 3,
"Longitude": 35.113142,
"Latitude": 33.934319
}
Akıllı mama kabında mama kalıp kalmadığının durum bilgisi POST Request olarak buraya gönderilir. Uygulama buradaki veriden faydalanarak mama haritasındaki noktaların durumunu günceller.
Örnek POST/GET REQUEST
{
"IsFoodFinished":1,
"Location_Id": 0,
"Longitude": 35.111503,
"Latitude": 33.939892,
}
- https://dirty-paws.ey.r.appspot.com/isFood Bağlı bulunan kamera tarafından akıllı mama kabının üstünden veya yanından çekilmiş fotoğraflarda mama kabının içerisinde mama veya yabancı cisim olup olmadığının tespit edilmesini sağlayamak amacıyla geliştirilen derin öğrenme modelinin barındığı endpointtir. Gelen fotoğrafaya göre kabın içinde mama olup olmadığı bilgisini 1 veya 0 olarak döndürür.
Elimizdeki kredi ile GAE üzerinde GPU çalıştıramadığımız için bu kısım üretime dahil edilmemiştir. Lokal olarak çalıştırabilirsiniz.
Örnek POST REQUEST
{
"ImageBowl": "\"http://storage.googleapis.com/dirty-paws.appspot.com/test.jpg\"",
"IsFood": null,
"Resolved": 3,
"Location_Id": 0,
"Location_Id": 1,
"Longitude": 35.113370,
"Latitude": 33.933439
}
Örnek GET REQUEST
{
"ImageBowl": "\"http://storage.googleapis.com/dirty-paws.appspot.com/test.jpg\"",
"IsFood": 1,
"Resolved": 3,
"Location_Id": 0,
"Location_Id": 1,
"Longitude": 35.113370,
"Latitude": 33.933439
}
Windows 10 kullanıcıları için hazırlanmıştır
Projede MySQL veritabanı kullanılmıştır. Windows üzerinde MySQL Workbench ile kendi veritabanınızı oluşturabilirsiniz. İndirmek için tıklayın Yeni bir veritabanı oluşturmak için bu linkteki adımları takip edebilirsiniz.
Eğer PyCharm kullamıyorsanız DB Browser eklentisi veritabanı işlemleriniz konusunda size oldukça yardımcı olacaktır.
Ön gereklilikler Python 3.7.x
Sanal ortam yaratacağımız için virtuelenv bilgisayarımızda kurulu olmalı. Aşağıdaki komut ile kurabilirsiniz.
pip install virtualenv
Repository'i klonladığınız klasöre giderek sanal ortam kurulumu için sırasıyla aşağıdaki komutları çalıştırın
env\scripts\activate
pip install -r requirements.txt
backend/settings.py dosyanındaki ilgili kısımları kendi veritabanı bilgilerinizi kapsayacak şekilde değiştirin.
else:
# Running locally so connect to either a local MySQL instance or connect
# to Cloud SQL via the proxy. To start the proxy via command line:
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[YOUR-DATABASE]',
'HOST': '127.0.0.1',
'USER': '[YOUR-USERNAME]',
'PORT':3306,
'PASSWORD': '[YOUR-PASSWORD]',
}
}
Gerekli bilgileri girdikten sonra aşağıdaki komutlar ile migration işlemimizi tamamlamamız gerekiyor.
python manage.py makemigrations
python manage.py migrate
Artık Django uygulamamızı yerel sunucu çalıştırabiliriz.
python manage.py runserver
http://127.0.0.1:8000 adresinden uygulamaya göz atabilirsiniz.
Sıradaki aşama olarak uygulamamızı Google Cloud da nasıl deploy edeceğimize bakacağız. İsterseniz Google'ın kendi dökümantasyonundan da faydalanabilirsiniz.
Gerekliliklerimiz Şu şekilde
- Google Cloud SDK
- Cloud SQL Proxy
- Cloud SQL Admin API aktif olmalı
- Faturalandırma hesabı aktif olmalı
Gerekli kurulumları ve ayarları yaptıktan sonra. Terminal üzerinde aşağıdaki komutu çalıştırarak Google Cloud hesabımıza giriş yapıyoruz
gcloud auth application-default login
Cloud SQL kullanabilmek için Cloud SQL Admin API yı aktif etmemiz lazım
gcloud services enable sqladmin
Google Cloud Platform üzerinden MySQL Veritabanı örneği oluşturmamız gerekiyor bunun için aşağıdaki linkten faydalanabilirsiniz
Örnek Oluşturma
Veritabanı örneğimizi oluşturduktan sonra yine terminale dönerek oluşturduğumuz örnek adı ile birlikte aşağıdaki komutu çalıştırıyoruz.
gcloud sql instances describe [ÖRNEK ADI]
Az önce çalıştırdığımız komut bize bağlantı ismimizi gösterecek connectionName kısmından bağlantı ismimizi kopyalıyoruz ve terminalden cloud_sql_proxy.exe dosyasını indirdiğimiz klasöre gidiyoruz. Aşağıdaki komutu çalıştırarak örneğimize bağlanıyoruz.
cloud_sql_proxy.exe -instances="[BAĞLANTI İSMİNİZİ BURAYA GİRİN]"=tcp:3306
Google Cloud Platform a dönerek oluşturduğumuz örnek üzerinde bir veritabanı ve bir kullanıcı oluşturacağız. Bunun için aşağıdaki linklerden faydalanabilirsiniz
Yeni veritabanı oluşturma
Yeni kullanıcı oluşturma
tekrardan backend/settings.py dosyasını açıyoruz ve aşağıdaki kısmı google cloud daki bilgilerimize göre değiştiriyoruz.
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[YOUR-INSTANCE-NAME]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
'NAME': '[YOUR-DATABASE]',
}
}
Tekrardan migration işlemimizi gerçekleştiriyoruz
python manage.py makemigrations
python manage.py migrate
Aşağıdaki komut ile bir yönetici hesabı oluşturuyoruz. Sizden kullanıcı adı, email ve parola isteyecek
python manage.py createsuperuser
Eğer static dosyalarda bir değişiklik yaptıysanız aşağıdaki komutu çalıştırmanız gerekiyor
python manage.py collectstatic
Artık uygulamamızı deploy edebiliriz.
gcloud app deploy