忍住凛音桃花的淫技 无码精品人妻一区二区三区漫画 吉泽明步一区二区三区视频 av永久免费观看网站蜜芽 国产精品久久久久久无码 中文字幕人妻丝袜乱一区三区 国产熟女偷窥高潮精品视频 在线观看av网站永久免费观看 五月天中文字幕MV在线 国产AV一区二区三区无码 香蕉视频下载 伊人色综合久久天天人手人婷 国产精品久久久十八禁 亚洲人成网站18禁止影院 亚洲欧洲专线一区 热re99久久精品国产 丰满老师引诱我进她身体 国产色婷婷五月精品综合在线 大香蕉伊在线74 国产麻豆区精品系列在线 亚洲精品第一页国产精品 亚洲精品国铲第一综合 欧美日韩高清在线精品一区二区 久久精品国产99国产精偷 18少女团永久地址 扒开女人下面使劲桶视频 国产成人无码午夜视频在线观看 无码专区日韩亚洲精品 狠狠热精品免费视频 国产亚洲综合AA系列 国模大胆一区二区三区 2020久久超碰国产新品 韩国三级HD中文字幕叫床 男桶女免费60分钟视频 久久国产热这里只有精品 人人操人人人操 超级激情无码 亚洲精品成人H在线观看 美女黄网站18禁免费看胸罩 偷拍一区二区 日本真人gifXXOO动态图 亚洲XX综合好看站芊芊 亚洲系列 中文字幕 国产精品视频播放 调教妻弟的日日夜夜 国产免费牲交视频 青草社区在线全亚洲更新最 亚洲无码电影 国产自产V一区二区三区C 国产一区在线播放 青草视频在线观看 夜夜揉揉日日人人 国产精品久久久久久2021 欧美乱子伦XXXX12在线 久久久久久亚洲麻豆精品无码 美女的秘 让男人桶爽网站 欧美少妇xxxx欧美少妇逼毛多 久久国产亚洲精品无码百度百度 豆奶芒果茄子视频 国产午夜精品理论片小YO奈 熟妇人妻VA精品中文字幕 女邻居给我口爆18p 噜噜噜AV在线观看免费 国产日产欧产美韩系列大片在线观看 亚洲成在人网站av天堂 老熟妇乱子伦牲交视频欧美 国产精品亚洲专区无码站点 最新日韩精品中文字幕一区 日本乱码伦午夜福利在线 久久福利合集精品视频 欧美艺术片在线看 撕开语文老师的黑色丝袜 亚洲a网站在线永久免费入口 激情爆乳一区二区三区 精品少妇一区二区三区在线视频 久久国产999视频久久久 日韩久久无码免费毛片软件 黑车司机赵邦贺31国产精品 国产精品无码2021在线观看 久久精品国产99国产精品严洲 久热re在线视频精品免费 亚洲AV无码乱码在线观看四虎 国产高清综合精品一区二区三区 翘臀后进娇喘呻吟的少妇 亚洲欧洲无码AV电影在线观看 欧美日韩一卡二卡三乱码免费天美传媒在线 欧美乱子伦XXXX12在线 91国自产精品一区二区三区破解版 日韩人妻无码久久一区 男人天堂a 全彩18禁裸乳羞羞漫画无遮挡 国产在线高清精品1314 国产高清打桩机42分钟 亚洲处破女A片出血 国产盗摄XXXX视频XXXX 曰批视频免费40分钟 沈阳45岁性感老熟女最后的高潮 国模吧无码一区二区三区 又摸又揉又黄又爽的视频 精品欧美一区二区不卡视频
首頁 >> 你造屌絲的后花園是怎么打理的嗎?
你造屌絲的后花園是怎么打理的嗎?
來源:  時間:2015-12-07
分享到:

本文旨在介紹一種創新型的智能物聯網科技來幫你管理園林。使用此系統能夠消除園林管理的麻煩,并且操作起來十分便捷,它簡單易懂,任何人都可以使用它去種植自己想要的植物果蔬。在這個系統的幫助下,主人只需要通過手機和網站接口在室內進行遙控,在它的幫助下,種植這件事是不是變得更加簡單,有趣,且互動性強。系統會幫你給植物澆水,施肥,并且確保它們能享受24/7全天候最佳生長環境。你只需要坐回沙發,看著你的植物茁壯成長,相信它們會被好好照看。

系統運用一系列的傳感器和執行器為植物創建良好的生長環境,在它們需要的準確時間為它們澆水、施肥。

設置將會和我們手機上的APP和網頁應用相連接,因此你可以隨時了解植物的生長動態。系統可以追蹤監測植物的成長,分析它們的生長過程。你還可以借助系統在植物上做一些商業性的實驗。

1
系統如何工作?

此項目包含4個部分:

1.植物生長環境植物上的一系列傳感器和執行器,由英特爾愛迪生控制。愛迪生與云的連接由Node.js伺服器控制。

2.安卓APP和網頁應用控制、監測植物生長數據,進行系統設置。

3.實時云支持后端—愛迪生、手機應用程序和網頁通過i.e. Firebase連接到云后端,我們的設計中沒有任何中間層,它是一個雙層的架構。

4.社交分享你可以把你的種植經歷再社交媒體上分享給你的好友。

2

特性

英特爾愛迪生將被用來實現數據獲取,將從植物及其周邊獲取的所有數據收集起來,進行處理,再實時地發送給服務器。系統將對環境溫度、光照以及濕度等參數進行監測,使用的傳感器有光敏傳感器、溫度傳感器、濕度傳感器。

我們為系統設置了一個簡易的繼電器,用它來控制植物周圍的光照、水量和溫度狀況,一旦數據被服務器接收,它會被進一步處理,最后以圖表的形式呈現所有參數。
基于瀏覽器的微型網站和安卓應用程序將包括以下幾個部分:
1.監測功能;
2.預置控制;
3.手動設置;
4.分享功能;
5.通知功能;
6.快照。

你可以用以下兩種方式控制系統:1)自主操作;2)預置

跟蹤進度:監視植物當前的生長狀況和生活條件,以圖表形式呈現;

點擊和成長:只要你告訴程序你希望植物長大,植物就會自動加載編程,為你的植物工廠進行設置。

分享:當你按下鳴叫按鈕,你就可以把你家小園子的健康和生活狀況發布到Twitter賬戶上去啦。

報警:當任何值不在最佳范圍內的時候,系統將會報警。

3

物料準備

開發板:

英特爾愛迪生板;

傳感器:
1.濕度傳感器;
2.LM 35溫度傳感器;
3.光敏傳感器;

4.水流傳感器;

執行器:
1.吹風機;
2.6W RGB LED;
3.馬達;
4.USB攝像頭;

5.12V 繼電器板;

其他:
1.桶;
2.植物;
3.管子;
4.剪刀;
5.焊錫槍;
6.膠槍。
4
傳感器和執行器

光傳感器

此傳感器被用來監測植物周圍的光照是否在最佳值范圍之內,更有甚者,它還能進行時鐘同步,例如日出和日落。它會一直監控著光照情況,一旦發現問題,立刻報警。

溫度傳感器

溫度傳感器監測植物周圍的溫度,根據不同的模式,它會調節溫度,來效仿植物生長的最佳條件。

濕度傳感器

顯示濕度等級,并觸發土壤中的水泵,給植物澆水。

水流傳感器

它測量水流,基于測量數據提供植物的水流消耗。

USB攝像頭

我們可以用它來抓拍植物成長過程的照片,做一個記錄。

5
硬件終端

英特爾愛迪生是整個系統的核心,它可以完成以下功能:

1)        收集數據;
2)        執行命令;
3)        拍照;

4)        將數據發送至云;

技術方面:
1) Node.js伺服器;
2) OpenCV代碼;
3) Arduino草圖;

4) MQTT。

注:
① Node.js是一個基于Chrome JavaScript運行時建立的平臺, 用于方便地搭建響應速度快、易于擴展的網絡應用。

② OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發行的跨平臺計算機視覺庫。本文中的“OpenCV”均指此含義。

6

軟件流程

在我們的設置當中,客戶端應用程序并不會直接與植物進行交流,每一步的處理工作都是通過云來完成,因為只若是將系統與WiFi連接起來,僅僅實現了物聯網中的聯網。

Arduino草圖

Arduino的草圖實現包含傳感器的數據采集和指揮執行的邏輯??蛻舳耸褂谜f明由網站服務器接收,接著使用MQTT協議與Arduino交流。

什么是MQTT?

MQTT是MQ Telemetry Transport的縮寫,表示MQ遙測傳輸。它是一種具有發布/提交功能的極輕便的信息協議,此協議專門針對受限設備而設計,適合低帶寬、高延遲、網絡狀況差的情況。設計原則是盡量減少對網絡帶寬和設備資源的需求,同時試圖確??煽啃?,并且在一定程度上確保能夠發送。這些協議規則在平時的使用中被證明能夠使新興的“機器對機器”的連接變得順暢,針對移動端應用的帶寬和電池電量都有改善作用。

Node.js伺服器

Node.js伺服器只能在英特爾愛迪生上運行,它能夠實時得和云后端保持連接,設計亮點在于我們為GreenBit系統采取兩層架構,而非傳統的三層架構。

Node.js有四項主要職責:
1)   實現與云的實時連接:此連接使用FireBaseApi實現,Api基本上能讓我們對某些參數進行一系列的監控,一旦這些值有任何的變化,系統將會立即發送到客戶端;
2)   點擊圖片上的OpenCV:每當接收到植物“自拍”請求時,Node.js伺服器就執行OpenCV模塊,這需要先拍一張照,然后將它以Base64編碼格式儲存在系統文件中。節點服務器將讀取該文件,然后以編碼的形式向伺服器傳送圖像;
3)   每一分鐘收取一次記錄:以一分鐘為節點,系統要求Arduino讀取并且將它傳送到MQTT上的節點;

4)   調用執行器:從APP上獲取請求,例如改變參數或參數值,照相等等,都傳達給Arduino。

7

伺服器代碼

// Include all modules required in your server
var Firebase =  require('firebase');
var mraa = require("mraa");
var fs = require('fs');
// Create a new Firebase Reference object  with your Firebase application url
var firebaseRef =  new Firebase('.firebaseio.com');
//Initialize values
var currentSettings = null;
var pushedSettings = null;
/********** Trigger message sending interrupt every 20 seconds *************/
var notifier_pin = new mraa.Gpio(5);
notifier_pin.dir(mraa.DIR_OUT);
// IPC to read data from Arduino Sketch ()example content: 123|45|200|....|0)
//Subscribe to interrupt notifications from Arduino
var subscriber_pin = new mraa.Gpio(1);    
subscriber_pin.dir(mraa.DIR_IN);    
subscriber_pin.isr(mraa.EDGE_RISING, subscriberEvent);
//Attach change event listener on Firebase currentSettings value
// Everytime the currentSettings value changes the callback will be executed.
// Ref:  https://www.firebase.com/docs/web/api/query/on.ht...
firebaseRef.child('currentSettings').on('value', function(dataSnapShot){  
 // Get the new settings
 var data = dataSnapShot.val();
 // Set the updated settings in pushed settings    
 pushedSettings = data;        
 //If the lightState is true then we need to switch on the otherwise vice versa  
  if(data.lightState)        
   data.lightState = '1';    
  else
      data.lightState = '0';    
  //Now we need to pass currentSettings value to Arduino to take appropriate action    
  //Since arduino cannot understand Node object we will create a concatenated string with values   //and pass it to Arduino using MQTT
  var arduinoSettingString = 'abcd'+'|'+data.plant+'|'+data.lightState+'|'+data.lightOn+'|'+data                              .lightOff+'|'+data.moisture+'|'+data.temperature;
  fs.writeFileSync("/home/root/ipc_codes/js_notification_out.txt", "NodeJS: "
                   + arduinoSettingStr   ing + "\n");    
  // Notify all the subscribers of the MQTT broker    
  notifyWorld();
});
//Fire event to notify all subscribers
function notifyWorld() {    
  notifier_pin.write(1);    
  setTimeout(function(){        
    notifier_pin.write(0);    
  },100);
}
// Subscribe event of Node server
// This event is called when data is sent from  Arduino to Node over MQTT
function subscriberEvent() {    
 var arduinoSettingString = fs.readFileSync('/home/root/ipc_codes/arduino_notification_out.txt')               .toString();    
 currentSettings = arduinoSettingString.split('|');  
 // In case tweet setting is true then send a tweet through firebase    
 // This setting is true whenever person touches the Tweet touch sensor    
 if(currentSettings[currentSettings.length -1] === '1')    
 {    
    var tweet = 'Temperature: '+ currentSettings[0] +' DEG  | Moisture: '+ currentSettings[1] +'     PPM | Light:'+ currentSettings[2]+ ' LUX';    
   firebaseRef.update({Tweet : tweet});    
 }
 //Add a new entry in logs    
   firebaseRef.child('logs').push({    
      temperature: currentSettings[2],      
      moisture: currentSettings[1],    
      light: currentSettings[0]    
    });
}
8

OpenCV伺服器

//Opencv node  server for sending Images
var Firebase = require('firebase');
var fs = require("fs");
var firebaseRef = new Firebase('https://greenbit.firebaseio.com');
var image_original =  "/home/akshay/Desktop/IoT/images/sepia.jpg";
//Attach watcher on snap value in firebase
//This value is set to True everytime a snap request comes from the App or web-app
firebaseRef.child('snap').on('value',function(snapShot){
 var value = snapShot.val();
 // If there's a snap request
 if(value){
   fs.writeFile("/home/akshay/Desktop/IoT/write.txt", "D", function(err) {
    if(err) {
     return console.log(err);
    }
    console.log("The file was saved!");
    func();
       });
 // Wait for two seconds because opencv will click the photo and save it in a file
 setTimeout(function(){
   //Read the file from the saved location
   fs.readFile(image_original,  function(err, original_data){
       //Get the string
       var base64Image = original_data.toString('base64');
       //Add a new snap in Snaps array in Firebase
       firebaseRef.child('snaps').push(base64Image);
      });
      firebaseRef.child('snap').set(false);
 }, 2000);
}
});
fs.readFile(image_original, function(err, original_data){
   var base64Image = original_data.toString('base64');
   console.log(base64Image);
   });
//Execute Opencv
var exec = require('child_process').execFile;
fs.writeFile("/home/akshay/Desktop/IoT/write.txt", "C", function(err) {
   if(err) {
       return console.log(err);
   }
   console.log("The file was saved!");
   func();
});
// start the server
var func = function(){
   console.log("Server starts!!");
   exec('/home/akshay/Desktop/IoT/laptop', function(err, data){
       console.log(err);
       console.log(data);
   });
}
9

Arduino草圖

// Arduino sketch
#include
#include
#include
#include
#include
#include
#include "rgb_lcd.h"
rgb_lcd lcd;
// make some custom characters:
byte heart[8] = {
   0b00000,
   0b01010,
   0b11111,
   0b11111,
   0b11111,
   0b01110,
   0b00100,
   0b00000
};
byte smiley[8] = {
   0b00000,
   0b00000,
   0b01010,
   0b00000,
   0b00000,
   0b10001,
   0b01110,
   0b00000
};
byte armsDown[8] = {
   0b00100,
   0b01010,
   0b00100,
   0b00100,
   0b01110,
   0b10101,
   0b00100,
   0b01010
};
byte armsUp[8] = {
   0b00100,
   0b01010,
   0b00100,
   0b10101,
   0b01110,
   0b00100,
   0b00100,
   0b01010
};
// Defining Macros
#define DEBUG 1
// Analog Pins Definition
const int light = 0;        
const int temp = 1;
const int moisture = 2;
const int waterFlow = 3;
// Digital Pins Definition
const int touch = 2;
const int bulbRelay = 4;
const int fanRelay = 7;
const int pump = 8;
const int ledPin = 13;
//IPC pins
int notifier_pin = 3;
int js_subscriber_pin = 6;
FILE *fromarduino, *toarduino;
int i = 0;
int c;
// Timer
unsigned long timeOut = 0;
bool newdata = false;
int showType = 0;
int mapLight;
int mapTemp;
int mapMoisture;
String lightString;
String tempString;
String moistureString;
int B = 3975;
char charVal[10];
char ipcString[200];
//Touch Bool
boolean touchStarted = false;
boolean tweetState = false;
String plantName = "";
String lightState = "";
char *incomingString;
char *splitVal;
String input = "";
int counter = 0;
int lastIndex = 0;
const int numberOfPieces = 6;
String pieces[numberOfPieces];
// Funtion to print error
void printError(char *str)
{
 Serial.print("Error: ");
 Serial.println(str);
}
void setup()
{
 Serial.begin(115200);
 pinMode(light, INPUT);
 pinMode(temp, INPUT);
 pinMode(moisture, INPUT);
 pinMode(waterFlow, INPUT);
 pinMode(bulbRelay, OUTPUT);
 pinMode(fanRelay, OUTPUT);
 pinMode(pump, OUTPUT);
 pinMode(ledPin, OUTPUT);
 pinMode(notifier_pin, OUTPUT);  
 pinMode(js_subscriber_pin, INPUT_PULLUP);
 // set up the LCD's number of columns and rows:
 lcd.begin(16, 2);
 lcd.clear();
 lcd.setRGB(0, 255, 0);
 lcd.createChar(0, heart);
 lcd.createChar(1, smiley);
 lcd.createChar(3, armsDown);
 lcd.createChar(4, armsUp);
 lcd.setCursor(0, 0);
 lcd.write(4);
 lcd.write(4);
 lcd.setCursor(4, 0);
 lcd.print("GREENBIT");
 lcd.setCursor(14, 0);
 lcd.write(4);
 lcd.write(4);
 digitalWrite(bulbRelay, HIGH);
 digitalWrite(fanRelay, HIGH);
 //Interrupts Initialization
 attachInterrupt(touch, touchTweet, CHANGE);
 attachInterrupt(js_subscriber_pin, subscriberEvent, RISING);
 delay(10);
}
void loop()
{
 lcd.setCursor(0, 1);
 lcd.print(plantName);
//  lcd.write(3);
//  delay(10);
//  lcd.write(4);
//  delay(10);
 int setTemp, setLight, setMoisture;
 if(timeOut == 0)
 timeOut = millis();
 if ((millis()-timeOut) >= 1000)
 {
   Serial.println("Test");
   mapLight = analogRead(light);
   mapTemp = analogRead(temp);
   mapMoisture = analogRead(moisture);
   //Light processing
   mapLight = map(mapLight, 0, 800, 0, 100);
   //Temperature processing
   float floatTemp = (float)(1023-mapTemp)*10000/mapTemp;
   int tempCelsius=1/(log(floatTemp/10000)/B+1/298.15)-273.15;
   String lightString = String(mapLight);
   String tempString = String(tempCelsius);
   String moistureString = String(mapMoisture);
   Serial.print(tempCelsius);
   Serial.print(mapLight);
   Serial.println(mapMoisture);
   String finalString = tempString + "," + moistureString  + ","  + lightString;
   finalString.toCharArray(ipcString, finalString.length()+1);
   Serial.println(ipcString);
   publishData();
   notifyWorld();
   delay(100);
   timeOut = millis();
 }
 //Temperature control
 if(mapTemp > setTemp)
 {
   do
   {
     digitalWrite(fanRelay, HIGH);
   }while(mapTemp < (setTemp - 5));
 }
 else if(mapTemp < setTemp)
 {
   do
   {
     digitalWrite(fanRelay,LOW);
   }while(mapTemp < (setTemp + 5));
 }
//Light Control
if(lightState == "0")
{
 digitalWrite(bulbRelay, LOW);
}
else
 digitalWrite(bulbRelay, HIGH);
//Moisture and Motor Control
   if(mapMoisture > setMoisture)
 {
   do
   {
     digitalWrite(pump, HIGH);
   }while(mapMoisture < (setMoisture - 5));
 }
 else if(mapMoisture < setMoisture)
 {
   digitalWrite(pump,LOW);
 }while(mapMoisture < (setMoisture + 5));
}
//loop ends
//ISR
void touchTweet()
{
 digitalWrite(ledPin,HIGH);
 if(mapTemp < 20)
 {
   tweetState = 1;
   lcd.setRGB(200, 0, 0);
   lcd.setCursor(0, 1);
   lcd.write((unsigned char)0);
   lcd.setCursor(3, 1);
   lcd.print("I AM SAD");
 }
 else
 {
   tweetState = 0;
   lcd.setRGB(0, 200, 0);
   lcd.setCursor(0, 1);
   lcd.print("Light: ");
   lcd.print(mapLight);
   for (int positionCounter = 0; positionCounter < 13; positionCounter++)
   {
       // scroll one position left:
       lcd.scrollDisplayLeft();
       delay(150);
   }
   lcd.setCursor(2, 1);
   lcd.print("I");
   lcd.setCursor(4, 1);
   lcd.write((unsigned char)0);
   lcd.setCursor(6, 1);
   lcd.print("GREENBIT");
 }
 Serial.println("Touch Detected!!!");
}
//Read message from js notification file
void subscriberEvent() {
  toarduino = fopen("/home/root/ipc_codes/js_notification_out.txt","r");  //Opening message from JS
  if (toarduino)
  {
   while ((c = getc(toarduino)) != EOF)
   {
     if(c != 10)//new line
     {
          Serial.print((char)c);
     }
   }
   Serial.println("");
   Serial.println("----------------");
   fclose(toarduino);
  }
}
void publishData()
{
 fromarduino = fopen ("/home/root/ipc_codes/arduino_notification_out.txt", "w+");
 fprintf(fromarduino, "[%s]", ipcString);
 fclose(fromarduino);
}
//Nofity any body connected to this interrupt  (C++ program and NodeJS) program
void notifyWorld()
{
   digitalWrite(notifier_pin, HIGH);
   delay(100);
   digitalWrite(notifier_pin, LOW);
}
//Print data on Serial monitor and to adjust the sensor values upto 3 digits
void print_data(int val)
{
 int new_val;
 if(val<0)
 new_val = 0;
 else if(val>255)
 new_val=255;
 else new_val = val;
 if(new_val<10)
 {
   Serial.print(0);
   Serial.print(0);
   Serial.print(new_val);
 }
 else if(new_val>=10 && new_val<100)
 {
   Serial.print(0);
   Serial.print(new_val);
 }
 else
 Serial.print(new_val);
}
10

OpenCV 模塊

//OpenCV code to click images in multiple formats
// like Sobel, Blur, Sepia etc
#include iostream
#include opencv2/opencv.hpp
#include opencv2/highgui/highgui.hpp
#include opencv2/core/core.hpp
#include opencv2/imgproc/imgproc.hpp
using namespace std;
using namespace cv;
int main ()
{
  // local variable declaration:
  char parameter;
  cout << "Enter the parameter: ";
  cin >> parameter;
  // image variables
  int width = 640;
  int height = 480;
  Mat capImg;
  Mat grayImg;         //Gray Image
  // Sobel Image
  Mat sobleGrayImg;
  Mat sobelImg;
  Mat grad_x, grad_y;
  Mat abs_grad_x, abs_grad_y;
  int sscale = 2;
  int sobelDelta = 0;
  int ddepth = CV_16S;
  // Blur Image
  Mat blurImg, blurGrayImg;
  // SEPIA IMAGE
  Mat sepiaImg;
  Mat_ sepia(3,3);
  // Canny Image
  Mat cannyImg;
  int threshold1 = 1;
  int threshold2 = 150;
  // Laplace Image
  Mat laplaceImg;
  Mat src_gray, dstImg;
  int kernel_size = 3;
  int lscale = 1;
  int laplaceDelta = 0;
  int c;
  // Canny Blur Image
  Mat cblurImg, cb_grayImg;
  // Pattern Image
  Mat dst, cir;
  Mat cir_32f, dst_32f;
  int bsize = 8;
  VideoCapture cap(-1);
  if(!cap.isOpened())
  {
     cout<<"Cam Not opend..." << endl;
     exit(-1);
  }
  cap.set(CV_CAP_PROP_FRAME_WIDTH, width);
  cap.set(CV_CAP_PROP_FRAME_HEIGHT, height);
  cap >> capImg;
  imwrite("/home/root/akshay/final/frame.jpg", capImg);
  cap.release();
  imshow("Color", capImg);
  switch(parameter)
  {
     // COLOR IMAGE
     case 'A' :
     imwrite("/home/root/akshay/final/color.jpg", capImg);
     imshow("Color Image", capImg);
     break;
     // GRAY IMAGE
     case 'B' :
     cvtColor(capImg, grayImg, CV_BGR2GRAY);
     imwrite("/home/root/akshay/final/gray.jpg", grayImg);
     imshow("Gray Image", grayImg);
     break;
     // SOBEL IMAGE
     case 'C' :
     GaussianBlur( capImg, capImg, Size(3,3), 0, 0, BORDER_DEFAULT );
     cvtColor( capImg, sobleGrayImg, CV_RGB2GRAY );
     // Gradient X
     Sobel( sobleGrayImg, grad_x, ddepth, 1, 0, 3, sscale, sobelDelta, BORDER_DEFAULT );
     // Gradient Y
     Sobel( sobleGrayImg, grad_y, ddepth, 0, 1, 3, sscale, sobelDelta, BORDER_DEFAULT );
     convertScaleAbs( grad_x, abs_grad_x );
     convertScaleAbs( grad_y, abs_grad_y );
     addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, sobelImg );
     imwrite("/home/root/akshay/final/sobel.jpg", sobelImg);
     imshow("Sobel Image",sobelImg);
     break;
     // SEPIA IMAGE
     case 'D' :
     sepia << 0.131, 0.534, 0.272,
            0.168, 0.686, 0.349,
            0.189, 0.769, 0.393;
     cv::transform(capImg, sepiaImg, sepia);
     imwrite("/home/root/akshay/final/sepia.jpg", sepiaImg);
     imshow("Sepia Image", sepiaImg);
     break;
     // CANNY IMAGE
     case 'E' :
     cvtColor(capImg, cannyImg, CV_BGR2GRAY);
     Canny(cannyImg, cannyImg, threshold1, threshold2);
     imwrite("/home/root/akshay/final/cannyImg.jpg", cannyImg);
     imshow("Canny Image",cannyImg);
     break;
     // LAPLACE IMAGE
     case 'F' :
     GaussianBlur( capImg, capImg, Size(3,3), 0, 0, BORDER_DEFAULT );
     Laplacian( capImg, dstImg, ddepth, kernel_size, lscale, laplaceDelta, BORDER_DEFAULT );
     convertScaleAbs( dstImg, laplaceImg );
     imwrite("/home/root/akshay/final/laplace.jpg", laplaceImg);
     imshow( "Laplace Image", laplaceImg );
     break;
     // CANNY BLUR IMAGE
     case 'G' :
     cvtColor(capImg, cb_grayImg, CV_BGR2GRAY);
     Canny(cb_grayImg, cb_grayImg, threshold1, threshold2);
     blur( cb_grayImg, cblurImg, Size(4,4) );
     imwrite("/home/root/akshay/final/cblur.jpg", cblurImg);
     imshow("Canny Blur Image",cblurImg);
     break;
     // Pattern Image
     case 'H' :
     dst = cv::Mat::zeros(capImg.size(), CV_8UC3);
     cir = cv::Mat::zeros(capImg.size(), CV_8UC1);
     for (int i = 0; i < capImg.rows; i += bsize)
     {
        for (int j = 0; j < capImg.cols; j += bsize)
        {
           Rect rect = cv::Rect(j, i, bsize, bsize) &
                           cv::Rect(0, 0, capImg.cols, capImg.rows);
           Mat sub_dst(dst, rect);
           sub_dst.setTo(cv::mean(capImg(rect)));
           circle(cir, cv::Point(j+bsize, i+bsize), bsize/2-1, CV_RGB(255,255,255), -1, CV_AA);
        }
     }
     cir.convertTo(cir_32f, CV_32F);
     normalize(cir_32f, cir_32f, 0, 1, cv::NORM_MINMAX);
     dst.convertTo(dst_32f, CV_32F);
     vector channels;
     split(dst_32f, channels);
     for (int i = 0; i < channels.size(); ++i)
          channels[i] = channels[i].mul(cir_32f);
       merge(channels, dst_32f);
       dst_32f.convertTo(dst, CV_8U);
       imwrite("/home/root/akshay/final/pattern.jpg", dst);
       imshow("Pattern Image", dst);
       break;
  }
  return 0;
}
11

軟件前端

技術堆棧

1)Ionic:( http://ionicframework.com/)

ionicionic是一個用來開發混合手機應用的,開源的,免費的代碼庫,專注于用WEB開發技術,是基于HTML5創建類似于手機平臺原生應用的一個開發框架。這個框架的目的是從web的角度開發手機應用,基于PhoneGap的編譯平臺,可以實現編譯成各個平臺的應用程序,可以優化html、css和js的性能,構建高效的應用程序,而且還可以用于構建Sass和AngularJS的優化。

2)AngularJS(https://angular.io/)

HTML是一門很好的為靜態文本展示設計的聲明式語言,但當我們試圖用它來制作網絡應用動態視圖時,它是不能夠實現的。AngularJS使用了不同的方法,它嘗試去補足HTML本身在構建應用方面的缺陷。AngularJS通過使用我們稱為標識符(directives)的結構,讓瀏覽器能夠識別新的語法。由此產生的環境是極富表現力的,可讀性強,發展迅速。

3)Angular Material(https://material.angularjs.org/)

Angular Material項目是Angular.js中的材料設計,以實現相應功能。這個項目提供了一套基于材料設計系統的可重復使用的、經過嚴格測試可訪問的UI組件。

12

軟件后端


技術堆棧:

1)FireBase:(https://www.firebase.com/)

FireBase可以增強您的應用程序的后臺,包括數據存儲,用戶認證,靜態托管等。專注于創造非凡的用戶體驗。

2)Zapier(https://zapier.com/)

Zaps(快速切換)使用觸發和行動來自動創建。你可以使用實現任何兩個支持Zapier應用程序的連接。

3)數據庫

數據庫模式在附件中以照片形式被分享。

13
連接

手機應用程序(https://github.com/shailesh17mar/GreenBit-IONIC)

網頁(https://github.com/shailesh17mar/GreenBit)

手機端和網頁端的資料和設置都在這兩個網址中哦~~~
樱桃酱饼教学视频

忍住凛音桃花的淫技 无码精品人妻一区二区三区漫画 吉泽明步一区二区三区视频 av永久免费观看网站蜜芽 国产精品久久久久久无码 中文字幕人妻丝袜乱一区三区 国产熟女偷窥高潮精品视频 在线观看av网站永久免费观看 五月天中文字幕MV在线 国产AV一区二区三区无码 香蕉视频下载 伊人色综合久久天天人手人婷 国产精品久久久十八禁 亚洲人成网站18禁止影院 亚洲欧洲专线一区 热re99久久精品国产 丰满老师引诱我进她身体 国产色婷婷五月精品综合在线 大香蕉伊在线74 国产麻豆区精品系列在线 亚洲精品第一页国产精品 亚洲精品国铲第一综合 欧美日韩高清在线精品一区二区 久久精品国产99国产精偷 18少女团永久地址 扒开女人下面使劲桶视频 国产成人无码午夜视频在线观看 无码专区日韩亚洲精品 狠狠热精品免费视频 国产亚洲综合AA系列 国模大胆一区二区三区 2020久久超碰国产新品 韩国三级HD中文字幕叫床 男桶女免费60分钟视频 久久国产热这里只有精品 人人操人人人操 超级激情无码 亚洲精品成人H在线观看 美女黄网站18禁免费看胸罩 偷拍一区二区 日本真人gifXXOO动态图 亚洲XX综合好看站芊芊 亚洲系列 中文字幕 国产精品视频播放 调教妻弟的日日夜夜 国产免费牲交视频 青草社区在线全亚洲更新最 亚洲无码电影 国产自产V一区二区三区C 国产一区在线播放 青草视频在线观看 夜夜揉揉日日人人 国产精品久久久久久2021 欧美乱子伦XXXX12在线 久久久久久亚洲麻豆精品无码 美女的秘 让男人桶爽网站 欧美少妇xxxx欧美少妇逼毛多 久久国产亚洲精品无码百度百度 豆奶芒果茄子视频 国产午夜精品理论片小YO奈 熟妇人妻VA精品中文字幕 女邻居给我口爆18p 噜噜噜AV在线观看免费 国产日产欧产美韩系列大片在线观看 亚洲成在人网站av天堂 老熟妇乱子伦牲交视频欧美 国产精品亚洲专区无码站点 最新日韩精品中文字幕一区 日本乱码伦午夜福利在线 久久福利合集精品视频 欧美艺术片在线看 撕开语文老师的黑色丝袜 亚洲a网站在线永久免费入口 激情爆乳一区二区三区 精品少妇一区二区三区在线视频 久久国产999视频久久久 日韩久久无码免费毛片软件 黑车司机赵邦贺31国产精品 国产精品无码2021在线观看 久久精品国产99国产精品严洲 久热re在线视频精品免费 亚洲AV无码乱码在线观看四虎 国产高清综合精品一区二区三区 翘臀后进娇喘呻吟的少妇 亚洲欧洲无码AV电影在线观看 欧美日韩一卡二卡三乱码免费天美传媒在线 欧美乱子伦XXXX12在线 91国自产精品一区二区三区破解版 日韩人妻无码久久一区 男人天堂a 全彩18禁裸乳羞羞漫画无遮挡 国产在线高清精品1314 国产高清打桩机42分钟 亚洲处破女A片出血 国产盗摄XXXX视频XXXX 曰批视频免费40分钟 沈阳45岁性感老熟女最后的高潮 国模吧无码一区二区三区 又摸又揉又黄又爽的视频 精品欧美一区二区不卡视频