# rtx2080測試機
暈到死安裝程序--------------
https://visualstudio.microsoft.com/zh-hant/downloads/


```
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Component.RoslynrCompiler",
"Microsoft.Component.MSBuild",
"Microsoft.VisualStudio.Component.CoreBuildTools",
"Microsoft.VisualStudio.Workload.MSBuildTools",
"Microsoft.VisualStudio.Component.Windows10SDK",
"Microsoft.VisualStudio.Component.VC.CoreBuildTools",
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"Microsoft.VisualStudio.Component.VC.Redist.14.Latest",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Component.VC.CMake.Project",
"Microsoft.VisualStudio.Component.TestTools.BuildTools",
"Microsoft.VisualStudio.Component.VC.ASAN",
"Microsoft.VisualStudio.Component.TextTemplating",
"Microsoft.VisualStudio.Component.VC.CoreIde",
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core",
"Microsoft.Component.VC.Runtime.UCRTSDK",
"Microsoft.VisualStudio.Component.VC.140",
"Microsoft.VisualStudio.Workload.VCTools"
]
}
```
安裝驅動
sudo ubuntu-drivers autoinstall
安裝cuda cudnn
要選 ubuntu 18 runfile 要取消driver
https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork
安裝anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh
sh Anaconda3-2022.10-Linux-x86_64.sh
https://repo.anaconda.com/archive/Anaconda3-2020.11-Windows-x86_64.exe
安裝pytorch
https://www.anaconda.com/products/individual
conda create --name yolact python==3.7 -y
conda activate yolact
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch -y
pip install opencv-python
pip install pycocotools-windows
--------------
AnyDesk安裝
sudo apt update; sudo apt upgrade
wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo apt-key add -
sudo nano /etc/apt/sources.list.d/anydesl.list
新增 deb http://deb.anydesk.com/ all main

anydesk display server not supported問題
修改/etc/gdm3/custom.conf
```
# GDM configuration storage
#
# See /usr/share/gdm/gdm.schemas for a list of available options.
[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false
# Enabling automatic login
AutomaticLoginEnable = true
AutomaticLogin = $USERNAME
# Enabling timed login
# TimedLoginEnable = true
# TimedLogin = user1
# TimedLoginDelay = 10
[security]
[xdmcp]
[chooser]
[debug]
# Uncomment the line below to turn on debugging
# More verbose logs
# Additionally lets the X server dump core if it crashes
#Enable=true
```
RDP安裝/////////////////
https://zhuanlan.zhihu.com/p/93438433
sudo add-apt-repository ppa:martinx/xrdp-hwe-18.04
sudo apt-get update
sudo apt-get install xrdp xorg xrdp
sudo adduser xrdp ssl-cert
echo xfce4-session > ~/.xsession
sudo nano /etc/xrdp/startwm.sh
加這些:-----------------
if test -r /etc/profile; then
. /etc/profile
fi
startxfce4
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
-------------------------------
n
//////////////////////////
conda 安裝教學-----------------------
conda create --name yolact python==3.7 -y
conda activate yolact
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch -y
ubuntu@192.168.43.43
pip install opencv-python
pip install pycocotools-windows
pip install requests
docker 更新
docker commit -m="explain" -a="author" a7829c13f2fc michael/curve
| 參數 | 說明 |
| -------- | -------- |
| -m | 描述 |
| -a |作者 |
|a7829c13f2fc|container id|
|michael/curve|mirror名稱|
SCP傳檔案教學------------
scp -r ubuntu@192.168.43.43:/home/ubuntu/Desktop/yolact-master ./
/home/ubuntu/Desktop/yolact-master
-r 船資料夾
./放在目前的目錄
-------------------------
output.py
No module named ‘torch.cuda.amp.autocast’
conda env create -f
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

```
import os
import getpass
import torch
from time import time
config = 'yolact_base_config'
pth_path = 'yolact_base_2777_133333.pth'
val_dir = 'data/test/'
output_dir = './out'
os.system(f'python -W ignore eval.py --trained_model={pth_path} --score_threshold=0.1 --top_k=15 --config {config} --video=rtsp://admin:rdfg1235@210.240.245.72:554/main_0')
```
eval.py
網頁Flask部分
Flask教學
https://ithelp.ithome.com.tw/articles/10222132
```
def web_view():
app = Flask(__name__)
def get_image():
while True:
ret, jpeg = cv2.imencode('.jpg', web_out)
jpeg = jpeg.tobytes()
yield(b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n'+ jpeg + b'\r\n')
time.sleep(0.03) # my Firefox needs some time to display image / Chrome displays image without it
@app.route("/")
def stream():
return Response(get_image(), mimetype="multipart/x-mixed-replace; boundary=frame")
def one_image(wb):
ret, jpeg = cv2.imencode('.jpg', wb)
jpeg = jpeg.tobytes()
#yield(b'--frame\r\n'
# b'Content-Type: image/jpeg\r\n\r\n'+ jpeg + b'\r\n')
return(jpeg)
time.sleep(0.03) # my Firefox needs some time to display image / Chrome displays image without it
@app.route("/out")
def out():
return Response(one_image(web_out), mimetype="image/jpeg")
@app.route("/in")
def webin():
return Response(one_image(web_in), mimetype="image/jpeg")
@app.route("/shutdown")
def shutdown():
#exit()
os.system('ps -ef | grep monitor.py| grep -v grep | awk \'{print $2}\' | xargs kill -9')
os.system('ps -ef | grep eval.py| grep -v grep | awk \'{print $2}\' | xargs kill -9')
return Response('shutdown')
# If the path is a digit, parse it as a webcam index
app.run('0.0.0.0')
```
screen部分
```
if out_path is None:
ret, jpeg = cv2.imencode('.jpg', frame_buffer.get())
screen=jpeg.tobytes()
```
多工部分
pool.apply_async(web_view)
process異常偵測 monitor HA切換
container 狀態偵測
彎曲鋼鐵截圖一秒鐘
log存檔
alert機制 發email
及時抓mp4 及時變是 done
192.168.43.47
必須 reboot 和 裝nvidia-docker 然後重啟docker這樣container才能使用
unbuntu auto send gmail config
https://blog.gtwang.org/linux/linux-send-mail-command-using-ssmtp-and-gmail/
gmail script: echo "alert" | ssmtp anos71334@gmail.com
https://wsgzao.github.io/post/keepalived/
#netcat port monitoring
nc -v 210.240.245.72 554 -w1
https://blog.gtwang.org/linux/linux-utility-netcat-examples/
yolact.sh
```
#!/bin/bash
cd /home/ubuntu/yolact-master/
source /home/ubuntu/anaconda3/etc/profile.d/conda.sh
conda activate yolact && python3 output.py
```
user=root
/etc/keepaliveed/ccc.sh
echo "1"> /test.txt
OK
user=ubuntu
/home/ubuntu/yolact-master/ccc.sh
echo "1"> ./tes1t.txt
bad
xfce4-terminal --command='/home/ubuntu/yolact-master/ccc.sh -t ls' --title=todo >/dev/pts/5
echo 'yetr5678' | sudo -S service keepalived status
echo 'yetr5678' | sudo -S service keepalived stop
echo 'yetr5678' | sudo -S service keepalived start
live streaming web
https://www.pyimagesearch.com/2019/09/02/opencv-stream-video-to-web-browser-html-page/
```
f = open("demofile2.txt", "w+")
localtime = time.asctime( time.localtime(time.time()) )
f.write(str(localtime))
f.close()
```
os.system(f'python -W ignore eval.py --trained_model={pth_path} --fast_nms False --score_threshold=0.1 --top_k=15 --config {config} --video_multiframe=20 --video=123.wmv:123.mp4')

https://towardsdatascience.com/video-streaming-in-web-browsers-with-opencv-flask-93a38846fe00
opencv-django
https://github.com/wenyenwei/opencv_django/blob/master/opencv_webapp/views.py
ubuntu enviroment mess up:install synaptic-pkexec app to resolve
reverse ssh tunnel
https://xenby.com/b/220-%E6%95%99%E5%AD%B8-%E7%94%A2%E7%94%9Fssh-key%E4%B8%A6%E4%B8%94%E9%80%8F%E9%81%8Ekey%E9%80%B2%E8%A1%8C%E5%85%8D%E5%AF%86%E7%A2%BC%E7%99%BB%E5%85%A5
sudo systemctl start rc-local
sudo systemctl status rc-local
新增root publc key
```
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4pG9yGLIkYQVYqRk4UODYez81KNSKCM2iQsq5FKn0C2kuzXqaMZRqsEBaIzclh8gUt8o63eyH974Wd3cdSNzOueRih9uoRzsoZYtM//CQ9Yj2+kIJYcEdupaHVr1Y4yOGxa/whE7bfOWY9flRuFVM3QoFUqvIFjMXEYIdsHwwevxsnVTMGYIZXMVSphPbZjH9kU5e5IXWrBKstVQ8nJSCC8Z+1EZYwqdGPMCcxjtQx1zfZKihNa+kYK3b7nG6elJASpE5OHeIsfTXiUps+HGnHJz6ccwiqWk+OnSS/p7kzternZOAD0GfsQguAmkywSEwp7Ys+0uXCPIKLUM/PyDF ubuntu@ubuntu-SYS-5039A-I
" >> ~/.ssh/authorized_keys
autossh -M 0 -f -nNT -R 5002:localhost:5000 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
autossh -M 0 -f -nNT -R 3302:localhost:3389 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
autossh -M 0 -f -nNT -R 9488:192.168.1.101:80 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
autossh -M 0 -f -nNT -R 2202:localhost:22 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
```
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCsQpSEVS887EWLc2Q8BlvdQjOg1eaD+AeUQQNV7ElfAr6EZm/QSExUEBjIUFtYk+ZnS1S6pfeUpChrkENi7fvYGQacat06P5wJ2q5X0vXKRAnQAckm+GHSZuX3Ks9IHnjiordkEThZ/UKt71aW6ThlV3h82B/cfih3sHlZok0JieeEYS8cwu/pQkE5wtvnvN4lr9BdKjwFMVO/zSzRJ4a3fB32zHSuVFvbQU0DocA2kZYPGmCqE83rhb4EN0H0MTann/WPHU84lItTduwJc8vOpoVvXKK5ZnlxWFblrCnL7lJOpZ+RtH+2SWh+j2Qfl6IaRmQy/SYR4mYQk9DDbN8jY7vDWF9eH8rOmVWs35MD91I2SlsWqkhjVfn6skJg5u/lgF+wzcWf+x5ROAW0ehLSbfeb7zs07CZmT19WrU3YJv/Yl1skWGfKy82emJ45gbpLLuIo6aOQhoQUugNa236FBGLoSAmiORXFKin0JNNcuGzPQoKxK0T0zNGo2ryvLyE= root@yolo-5d57f77b9b-ggqnp
">> ~/.ssh/authorized_keys
```
autossh -M 0 -f -nNT -R 5001:localhost:5000 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
autossh -M 0 -f -nNT -R 3301:localhost:3389 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
autossh -M 0 -f -nNT -R 5555:192.168.1.101:554 -o "ServerAliveInterval 5" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" hdfsadmin@210.240.245.72 -p9111
```
直播
```
import cv2
cap = cv2.VideoCapture('rtsp://admin:123456@172.16.1.81:5555/main_0')
ret,frame = cap.read()
while ret:
ret,frame = cap.read()
cv2.imshow("current frame",frame)
#cv2.imwrite('frame.jpg', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
cap.release()
```
檢驗區測試
```
import cv2
import numpy as np
median_list=[]
vid = cv2.VideoCapture('2.mp4')
avg_step=2
temp1=0
temp2=0
while(True):
temp1=temp1+1
ret, frame = vid.read()
frame = frame[100:,400:1200]
#frame=frame[658:680,150:500]#辨識區
pro_frame = cv2.morphologyEx(frame, cv2.MORPH_OPEN, np.ones((2,2)))
pro_frame = np.median(pro_frame[658:680,150:500])#辨識區
median_list.append(pro_frame)
avg=np.mean(median_list[-avg_step:])#中位數計算區
avg1=np.mean(median_list[:])
cv2.putText(frame,str(avg), (100, 50), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 255), 1, cv2.LINE_AA)
cv2.putText(frame,str(avg1), (200, 50), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 255), 1, cv2.LINE_AA)
cv2.putText(frame,str(avg-avg1), (300, 100), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 255), 1, cv2.LINE_AA)
if( np.mean(median_list[:])-np.mean(median_list[-avg_step:]))>2:
temp2=temp1
cv2.putText(frame,str(temp1-temp2), (400, 200), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 255), 1, cv2.LINE_AA)
cv2.imshow('aaa',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
```
django及時辨識網頁
```
def steel_monitoring(request):
global raw_img,out_img
switch = request.GET.get('switch', '')
pause = request.GET.get('pause', '')
save = request.GET.get('save', '')
if switch == 'on':
os.system("/home/ubuntu/yolact-master/yolact.sh")
if switch == 'off':
requests.get('http://'+ip_addr+':5000/shutdown')
if pause == 'pause':
raw_img = requests.get('http://'+ip_addr+':5000/in')
out_img = requests.get('http://'+ip_addr+':5000/out')
now_time=[time.strftime("%Y%m%d", time.localtime()),time.strftime("%H%M%S", time.localtime())]
save_time=time.strftime("%Y%m%d_%H%M%S", time.localtime())
pause=''
if save == 'save':
localdate=str(time.strftime("%m%d", time.localtime()))
localtime=str(time.strftime("%Y%m%d_%H%M%S", time.localtime()))
if os.path.exists("../screenshot/"+localdate) == False:
os.mkdir("../screenshot/"+localdate)
with open("../screenshot/"+localdate+"/"+localtime+"_in.jpg", "wb") as file: # 開啟資料夾及命名圖片檔
file.write(raw_img.content)
with open("../screenshot/"+localdate+"/"+localtime+"_out.jpg", "wb") as file: # 開啟資料夾及命名圖片檔
file.write(out_img.content)
save=''
context = {
'msg':request.GET.get('msg'),
}
return render(request, 'steel/steel_monitoring.html', context)
```
post_ajax
```
<div class="card mb-3">
<div class="card-header">
<i><img src="/static/icon/sis_icon_2_bk.png" width="20px" class="m_b5p_imp"></i> 即時監控
</div>
<div class="card-body">
<div class="table-responsive" id="">
<div class="w_49p9 h_600p float-left">
<iframe class="w_100 h_600p" id="demo1" name="demo1" src="http://192.168.43.43:5000/" frameborder="0" allowfullscreen="true"></iframe>
</div>
<div class="w_49p9 h_600p float-left">
<iframe class="w_100 h_600p" id="demo2" name="demo2" src="" frameborder="0" style="display: none;" allowfullscreen="true"></iframe>
</div>
<div class="w_100 float-left">
<hr>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onclick="pause_Btn()">暫停</div>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onclick="myFunction()">開始</div>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onclick="myFunction2()">比較</div>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onclick="save_Btn()">存檔</div>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onClick="poweron_Btn()">開啟</div>
<div class="btn btn-primary btn-sm btn-self w_5r_imp" onClick="poweroff_Btn()">關閉</div>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script type="text/javascript">
function myFunction() {
document.getElementById("demo2").style.display = "none";
document.getElementById("demo1").src = "http://192.168.43.43:5000/";
};
function myFunction2() {
document.getElementById("demo2").style.display = "block";
};
function pause_Btn() {
document.getElementById("demo2").style.display = "none";
document.getElementById("demo2").src = "http://192.168.43.43:5000/in";
document.getElementById("demo1").src = "http://192.168.43.43:5000/out";
$.ajax({
url: '/steel/steel_monitoring/',
type: 'get',
data: { 'pause': 'pause' },
success: function (msg) {
//alert('結果' + msg);
},
error: function (data) {
alert('status:' + data.status); // the status code
alert(data.responseJSON.error); // the message
}
});
};
function poweron_Btn() {
$.ajax({
url: '/steel/steel_monitoring/',
type: 'get',
data: { 'switch': 'on' },
success: function (msg) {
alert('啟動成功');
},
error: function (data) {
alert('status:' + data.status); // the status code
alert(data.responseJSON.error); // the message
}
});
};
function poweroff_Btn() {
$.ajax({
url: '/steel/steel_monitoring/',
type: 'get',
data: { 'switch': 'off' },
success: function (msg) {
},
error: function (data) {
alert('關閉成功');
//alert('status:' + data.status); // the status code
//alert(data.responseJSON.error); // the message
}
});
};
function save_Btn() {
$.ajax({
url: '/steel/steel_monitoring/',
type: 'get',
data: { 'save': 'save' },
success: function (msg) {
//alert('存檔成功');
},
error: function (data) {
alert('status:' + data.status); // the status code
alert(data.responseJSON.error); // the message
}
});
};
</script>
```
尋找類似名子資料夾
```
import os,time
now_time=[time.strftime("%Y%m%d", time.localtime()),time.strftime("%H%M%S", time.localtime())]
#now_time=['20210618','103804']
dir_list_time=[]
dir_list=[]
for root, dirs, files in os.walk("../yolact/outimage", topdown=False):
for name in dirs:
dir_list.append(name)
sn=name.split('_')
if sn[0]==now_time[0] and int(sn[1])<=int(now_time[1]):
dir_list_time.append(sn)
time_key=min(dir_list_time, key=lambda x: abs(int(x[1]) - int(now_time[1])))
print(time_key)
string = '_'.join(time_key)
print(string)
```
conda env create -f yolo.yml -y
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
pip3 install torch==1.10.2+cu113 torchvision==0.11.3+cu113 torchaudio==0.10.2+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
pip install seaborn
pip install pandas
pip install pyyaml
pip install opencv-python
pip install requests
pip install tqdm
pip install wandb
pip install flask
python detect_steel_light.py
pip install screen
C:\Users\aiuser\anaconda3\envs\yolo\python.exe
cd C:\Users\aiuser\Documents\steel_detect_n\steel_detect_n
C:\Users\aiuser\anaconda3\envs\yolo\python.exe detect_steel_light.py
conda env create -f yolo.yml -y
http://210.240.245.72:8777/video/yolo.yml
http://210.240.245.72:8777/video/steel_detect_n.zip
python detect_steel_light_stream.py --source rtsp://admin:123456@192.168.1.101:554/main_0
apt install htop
python train.py --data allscene_aftersplit/allscene.yaml --workers 10 --cache --batch 220 --device 0,1 --weights yolov5m6.pt
python train.py --data allscene_aftersplit/allscene.yaml --workers 25 --cache --batch 120 --device 0 --weights yolov5m.pt
python train.py --data allscene_aftersplit/allscene.yaml --workers 15 --cache --batch 80 --device 0,1 --imgsz 960 --weights yolov5m.pt
python train.py --data handlecrop/handle_crop.yaml --workers 25 --cache --batch 80 --device 0,1 --weights yolov5s6.pt
python train.py --data niddle_mi/niddle_mi.yaml --hyp niddle_mi/hyp.scratch_niddle.yaml --workers 15 --cache --batch 80 --device 0,1 --weights yolov5s6.pt
wandb key
4b3c2f767868cec053d8006e94423e08742e5ec1