主頁 >  其他 > 第七屆工程訓練大賽垃圾分類

第七屆工程訓練大賽垃圾分類

2021-04-14 11:44:53 其他

第七屆全國大學生工程訓練大賽垃圾分類

  • 前言
  • 一、機械結構設計
  • 二、視覺識別部分
    • 1.引入庫
    • 2.識別部分
  • 三、上下位機通信方式:
    • 1.高低電平通信:
    • 1.2高低電平樹莓派部分:
    • 2.stm32串口通信部分:
  • 四、下位機電機驅動部分
    • 1.電機:渦輪蝸桿電機(履帶負載較大,不可直接用步進直流電機)
    • 2.有關于延時的改進:
    • 3.stm32主函式:
  • 五、炸電機:

文章目錄

  • 前言
  • 一、機械結構設計
  • 二、視覺識別部分
    • 1.引入庫
    • 2.識別部分
  • 三、上下位機通信方式:
    • 1.高低電平通信:
    • 1.2高低電平樹莓派部分:
    • 2.stm32串口通信部分:
  • 四、下位機電機驅動部分
    • 1.電機:渦輪蝸桿電機(履帶負載較大,不可直接用步進直流電機)
    • 2.有關于延時的改進:
    • 3.stm32主函式:
  • 五、炸電機:


前言

本人有幸代表內蒙古工業大學參加內蒙古自治區的全國工程訓練大賽省賽,并在初賽取得前三名的成績,可惜后來決賽由于樹莓派死機導致程式崩潰,從而無緣國賽,但是經過測驗,我們的識別程式可以做到識別率95%,分類準確率90%以上,
硬體設備:樹莓派4B+8G(用于視覺識別以及播放視頻)
stm32f103zet6 (用于下位機控制電機進行分類)
機械結構設計:雙層履帶交叉分揀


一、機械結構設計

示例:如圖所示,采用雙層履帶結構


然而實物卻是這樣:

二、視覺識別部分

1.引入庫

代碼如下(示例):

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function


import argparse
import io
import time
import numpy as np
#import picamera
import cv2
import RPi.GPIO as GPIO

#import tensorflow as tf

from PIL import Image
from tflite_runtime.interpreter import Interpreter

2.識別部分

代碼如下:

def load_labels(path):
  with open(path, 'r') as f:
    return {i: line.strip() for i, line in enumerate(f.readlines())}


def set_input_tensor(interpreter, image):
  tensor_index = interpreter.get_input_details()[0]['index']
  input_tensor = interpreter.tensor(tensor_index)()[0]
  input_tensor[:, :] = image


def classify_image(interpreter, image, top_k=1):
  """Returns a sorted array of classification results."""
  set_input_tensor(interpreter, image)
  interpreter.invoke()
  output_details = interpreter.get_output_details()[0]
  output = np.squeeze(interpreter.get_tensor(output_details['index']))

  # If the model is quantized (uint8 data), then dequantize the results
  if output_details['dtype'] == np.uint8:
    scale, zero_point = output_details['quantization']
    output = scale * (output - zero_point)

  ordered = np.argpartition(-output, top_k)
  return [(i, output[i]) for i in ordered[:top_k]]



def main():

  parser = argparse.ArgumentParser(
      formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  parser.add_argument(
      '--model', help='File path of .tflite file.', required=True)
  parser.add_argument(
      '--labels', help='File path of labels file.', required=True)
  args = parser.parse_args()

  labels = load_labels(args.labels)

  #interpreter = tf.lite.Interpreter(args.model)
  interpreter = Interpreter(args.model)

  interpreter.allocate_tensors()
  _, height, width, _ = interpreter.get_input_details()[0]['shape']

  #with picamera.PiCamera(resolution=(640, 480), framerate=30) as camera:
    #camera.start_preview()

  cap = cv2.VideoCapture(0)
  #擷取畫面 寬度 設定為640
  cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
  #擷取畫面 高度 設定為480
  cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

  key_detect = 0
  times=1
  while (key_detect==0):
    ret,image_src =cap.read(0)

    frame_width=image_src.shape[1]
    frame_height=image_src.shape[0]

    cut_d=int((frame_width-frame_height)/2)
    crop_img=image_src[0:frame_height,cut_d:(cut_d+frame_height)]

    image=cv2.resize(crop_img,(224,224),interpolation=cv2.INTER_AREA)

    start_time = time.time()
    if (times==1):
      results = classify_image(interpreter, image)
      elapsed_ms = (time.time() - start_time) * 1000
      label_id, prob = results[0]

      print(labels[label_id],prob)
      num=int(label_id)
        cv2.putText(crop_img,labels[label_id] + " " + str(round(prob,3)), (5,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 1, cv2.LINE_AA)

    times=times+1
    if (times>1):
      times=1

    cv2.imshow('Detecting....',crop_img)



    if cv2.waitKey(1) & 0xFF == ord('q'):
      key_detect = 1

  cap.release()
  cv2.destroyAllWindows()

if __name__ == '__main__':
  main()

以上基于tenserflow,tenserflow適合在樹莓派上跑,但是如果資料集過大就會崩潰(我們就是因為這個原因,止步于省賽)建議資料集采樣圖片時控制在2000張左右,不然會崩


三、上下位機通信方式:

1.高低電平通信:

		   最開始因為下位機僅僅需要接受樹莓派識別結果,而結果種類只有四種,于是乎最開始想到的是:樹莓派往gpio寫高低電平,stm32浮空輸入電平結果,通過排列組合進行通信,原始碼如下:  
	communicate.h:
	#define Type_2  PEin(10)// PF13
	#define Type_3  PEin(11)// PF14
	#define Type_4  PEin(12)// PF15
	#define Type_5  PEin(13)// PF16

	#define  Nothing                     0
	#define  hazardous_waste      1
	#define  other_waste              2
	#define  Recyclable_waste     3
	#define  Kitchen_waste          4

	void communicate_Init(void);//初始化
	int  adjust(void);


	communicate.c:

	void communicate_Init(void)
	{
 
	 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);	
 	 //使能PB,PE埠時鐘
	
 	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13;				 	
 	//LED0-->PB.5 埠配置
 	GPIO_InitStructure.GPIO_Mode =   GPIO_Mode_IN_FLOATING; 	
 		 //推挽輸出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	 	 //IO口速度為50MHz
 	GPIO_Init(GPIOE, &GPIO_InitStructure);					
 	 //根據設定引數初始化GPIOB.5
 	GPIO_SetBits(GPIOE,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);						
 	 //PB.5 輸出高
	}

	int adjust(void){//判斷函式
	  delay_ms(10);//防抖
    if(Type_2==0&&Type_3==1&&Type_4==1&&Type_5==1)//第一個樹莓派io輸出低電平為可回收
    return Recyclable_waste;
		if(Type_2==1&&Type_3==0&&Type_4==1&&Type_5==1)//第二個io輸出低電平為有害垃圾
    return hazardous_waste;
    if(Type_2==1&&Type_3==1&&Type_4==0&&Type_5==1)//第三個輸出低電平為其他
    return other_waste;
		if(Type_2==1&&Type_3==1&&Type_4==1&&Type_5==0)//第四個輸出低電平為廚余垃圾
    return Kitchen_waste;
		return 0;
	}

1.2高低電平樹莓派部分:

	GPIO.setmode(GPIO.BCM)
    GPIO.setup(2,GPIO.OUT)
    GPIO.setup(3,GPIO.OUT)
    GPIO.setup(4,GPIO.OUT)
    GPIO.setup(17,GPIO.OUT)

    if num == 0:
        GPIO.output(2,GPIO.HIGH)
        GPIO.output(3,GPIO.HIGH)
        GPIO.output(4,GPIO.HIGH)
        GPIO.output(17,GPIO.HIGH)
        print('')

    elif num == 1:
        GPIO.output(2,GPIO.LOW)
        GPIO.output(3,GPIO.HIGH)
        GPIO.output(4,GPIO.HIGH)
        GPIO.output(17,GPIO.HIGH)
        print('可回收垃圾')

    elif num == 2:
        GPIO.output(2,GPIO.HIGH)
        GPIO.output(3,GPIO.LOW)
        GPIO.output(4,GPIO.HIGH)
        GPIO.output(17,GPIO.HIGH)
        print('有害垃圾')

    elif num == 3:
        GPIO.output(2,GPIO.HIGH)
        GPIO.output(3,GPIO.HIGH)
        GPIO.output(4,GPIO.LOW)
        GPIO.output(17,GPIO.HIGH)
        print('其他垃圾')

    elif num == 4:
        GPIO.output(2,GPIO.HIGH)
        GPIO.output(3,GPIO.HIGH)
        GPIO.output(4,GPIO.HIGH)
        GPIO.output(17,GPIO.LOW)
        print('廚余垃圾')

    else:
        GPIO.output(2,GPIO.HIGH)
        GPIO.output(3,GPIO.HIGH)
        GPIO.output(4,GPIO.HIGH)
        GPIO.output(17,GPIO.HIGH)

2.stm32串口通信部分:

void usb_communicate(void){
  u16 t;
	u16 len;
	if(USART_RX_STA&0x8000){//防抖
				delay_ms(100);
		    delay_ms(100);

  if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的資料長度
			printf("\r\n您發送的訊息為:\r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1發送資料
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
			}

			
		}
		
}

}



int USB_adjust(void){
    usb_communicate();
	 if(USART_RX_BUF[0]=='0'){
		 USART_RX_STA=0;
		 return Nothing  ;//沒有垃圾
	 }
   if(USART_RX_BUF[0]=='1'){
		 		USART_RX_STA=0;
		return  Recyclable_waste ;
	                         }//可回收
	 if(USART_RX_BUF[0]=='2'){
		 		USART_RX_STA=0;
		 	 return hazardous_waste ;
		}//有害
	  if(USART_RX_BUF[0]=='3'){
				USART_RX_STA=0;
		 return  other_waste;}//可回收垃圾
		if(USART_RX_BUF[0]=='4'){
				USART_RX_STA=0;
		return Kitchen_waste;}//廚余垃圾
				USART_RX_STA=0;
   return EOF;//錯誤標志位
}


提示:這里對文章進行總結:
例如:以上就是今天要講的內容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理資料的函式和方法,

四、下位機電機驅動部分

1.電機:渦輪蝸桿電機(履帶負載較大,不可直接用步進直流電機)

驅動:l298N(12V)

//.h
#ifndef __MOTOR_H
#define __MOTOR_H	 
#include "sys.h"

#define IN_1 PFout(1)// PB5
#define IN_2 PFout(2)// PE5	
#define IN_3 PFout(3)// PB5
#define IN_4 PFout(4)// PE5	


#define ZHENGXIANG  0
#define FANXIANG    1
#define STOP        2

void motor_Init(void);//初始化
void zongxiang_run(u16 model);
void hengxiang_run(u16 model);
void _delay_s(u16 s);	

void  stop(void);
void  Recyclable_waste_work(void);//可回收3號
void   hazardous_waste_work(void);//有害垃圾1號
void   other_waste_waste_work(void);//其他垃圾2號
void  Kitchen_waste_waste_work(void);//廚余垃圾4號
#endif
//.c
#include "motor.h"
#include "delay.h"


#define ZHENGXIANG  0
#define FANXIANG    1
#define STOP        2
void motor_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);	 //使能PB,PE埠時鐘
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;				 //LED0-->PB.5 埠配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根據設定引數初始化GPIOB.5
 

}

void hengxiang_run(u16 model){
		switch(model){
			case 	ZHENGXIANG : {
			      IN_3=0;
						IN_4=1;
						break;
			}
		  case  FANXIANG :{
			      IN_3=1;
				    IN_4=0;
						break;
			}
		  case  STOP:{
			      IN_3=1;
						IN_4=1;
						break;
			
			}
		
		}
}

 void zongxiang_run(u16 model){
		switch(model){
			case 	ZHENGXIANG : {
			      IN_1=0;
						IN_2=1;
						break;
			}
		  case  FANXIANG :{
			      IN_1=1;
				    IN_2=0;
						break;
			}
		  case  STOP:{
			      IN_1=1;
						IN_2=1;
						break;
			
			}
		
		}
}

void _delay_s(u16 s){
   int i; 
	for(i=0;i<=s;i++)
		delay_ms(1000);


}



void  Recyclable_waste_work(void){//可回收3號

        hengxiang_run(FANXIANG);
        zongxiang_run(FANXIANG);
	      _delay_s(5);
	      zongxiang_run(STOP);
        hengxiang_run(STOP);
        _delay_s(1);

}

void   hazardous_waste_work(void){//有害垃圾1號
	     zongxiang_run(ZHENGXIANG);
	     hengxiang_run(FANXIANG);
	     _delay_s(5);
	     zongxiang_run(STOP);
       hengxiang_run(STOP);
	     _delay_s(1);
	
}

void   other_waste_waste_work(void){//其他垃圾2號
	    hengxiang_run(ZHENGXIANG);
	    zongxiang_run(ZHENGXIANG);
	    _delay_s(5);
	    zongxiang_run(STOP);
      hengxiang_run(STOP);
	    _delay_s(1);
	
}

void  Kitchen_waste_waste_work(void){//廚余垃圾
	    hengxiang_run(ZHENGXIANG);
	    zongxiang_run(FANXIANG);
	    _delay_s(5);
	    zongxiang_run(STOP);
      hengxiang_run(STOP);
	    _delay_s(1);

}
void stop(void){

	      zongxiang_run(STOP);
        hengxiang_run(STOP);

}

2.有關于延時的改進:

 本人在除錯時發現keil環境中:delay_ms(1000)和delay_ms(3000)差別不大
 竟然有一下發現:
     void _delay_s(u16 s){
   int i; 
	for(i=0;i<=s;i++)
		delay_ms(1000);
}//明顯好于s*delay_ms(1000)

3.stm32主函式:

int main(void)
 {	 
//  u16 adcx;
//	float temp;
	delay_init();	    	 //延時函式初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設定中斷優先級分組為組2:2位搶占優先級,2位回應優先級
	uart_init(115200);	 	//串口初始化為115200
 	LED_Init();			     //LED埠初始化
	LCD_Init();			 	
 	Adc_Init();		  		//ADC初始化

	POINT_COLOR=RED;//設定字體為紅色 
	LCD_ShowString(60,50,200,16,16,"Elite STM32");	
	LCD_ShowString(60,70,200,16,16,"ADC TEST");	
	LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
	LCD_ShowString(60,110,200,16,16,"2015/1/14");	
	//顯示提示資訊
	POINT_COLOR=BLUE;//設定字體為藍色
	LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");	      
	LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");	
	 motor_Init();
	while(1)
	{
      if(adjust()){
			  delay_ms(200);
				delay_ms(200);
        
				switch(adjust()){
					case hazardous_waste:{//有害垃圾分類
						hazardous_waste_work();
						_delay_s(5);
					  break;}
				  case other_waste :{//其他垃圾分類
						other_waste_waste_work();
						_delay_s(5);
					  break;}
					case  Recyclable_waste :{//可回收垃圾分類
						Recyclable_waste_work();
						_delay_s(5);
					  break;}
					case  Kitchen_waste :{//廚余垃圾分類
						 Kitchen_waste_waste_work();
						_delay_s(5);
					   break;}
					default :{	//沒垃圾				
						stop();
					  break;}

   			}
			}
}
 
} 

五、炸電機:

在除錯程序中,我們炸了六個電機驅動,弄壞了一個步進電機
原因:一夜炸了六個電機驅動,我們依次排查電路接線、程式,最后竟然是電池的原
因!!!


視覺由吉飛敏大力支持
id:weixin_45785085
機械由秦俊酉大力支持

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275869.html

標籤:其他

上一篇:電子設計大賽應該準備什么

下一篇:吳永輝教授2021年講課7-9題解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more