猫盘onespace x3p系统使用

2023-12-27 13:58

本文主要是介绍猫盘onespace x3p系统使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

猫盘用了大概快一年了,主要的使用的功能以及最长用的功能就是samba服务,当做家庭的影音存储中心,其他的nas相关下载,同步等等功能用的极少。

故最终的需求就是,将猫盘做成一个纯净版的samba服务器,其他不常用的功能全部关闭掉。同时要能够使硬盘进行休眠,一个是减少不必要的噪音,机械硬盘的声音还是挺大的;二个是减少硬盘的消耗,没有数据读取的时候硬盘进入休眠状态。

使用猫盘原版系统发现是系统是无法休眠的,强制将硬盘进入休眠状态后,一段时间硬盘又会自己启动,推测应该是在跟猫盘的服务器同步信息,造成硬盘无法休眠。各种百度之后,都没找到好的解决方案。剩下就一条路,刷机。刷成x3p系统,刷机过程在此不表。

最终效果展示

在这里插入图片描述
在这里插入图片描述
默认只开启samba服务。
为了偶尔非局域网操作,故添加了易有云服务组件,默认也是设置为关闭状态。

设置硬盘休眠

1、使用ssh登录到猫盘,采用root权限登录,默认为root,密码:Etech12。登录之后如果发现修改某些文件没有权限。可在要操作的目录下执行如下命令。该问题也是百度了好久才找到的解决办法。因为后面要调整哪些应用要默认开机启动,故需要修改系统的文件。

mount -o remount,rw /

2、通过浏览器登录到猫盘,在系统管理里将设置硬盘休眠时间。为了测试硬盘休眠效果,可以先将其设置为10分钟。

在这里插入图片描述
3、硬盘休眠相关操作命令
hdparm软件可以实现硬盘状态设置,状态查询
查看是否安装了hdparm,x3p系统是默认安装了

[root@onespace ~]# hdparm -V
hdparm v9.50

查看硬盘当前状态,如果是standby,则硬盘处于休眠状态

[root@onespace ~]# hdparm -C /dev/sda1/dev/sda1:drive state is:  active/idle

让硬盘立刻进入休眠状态命令,此时如果查询硬盘状态,返回的应该是standby。休眠的时候硬盘只是停转,并不会断电,不会造成硬盘磁头频繁抬起放下,损伤硬盘。

[root@onespace ~]# hdparm -Y /dev/sda1/dev/sda1:issuing sleep command

设置硬盘无操作进入休眠的时间

[root@onespace ~]# hdparm -S 60 /dev/sda1/dev/sda1:setting standby to 60 (5 minutes)

这个数值设置为0则关闭这个功能,设置为1至240时,时间将为5秒的倍数,即5秒至20分钟,设置为241至251时,时间将为30分钟的1-11倍,即30分钟到5.5小时,设置为252象征着21分钟,253为?(不懂),255即为21分15秒。

如果不想用x3p自带的设置工具,只需要写一个bash启动脚本,放到/etc/init.d/文件家中,文件名要以大写S开头,然后chmod +x 可执行权限,每次开机运行一次即可。

4、测试休眠
注意事项:关闭掉所有上传下载的任务,关闭掉ssh登录,断开电脑映射的samba文件夹。一定要关闭所有与猫盘有通信的任务。

10分钟后,可以听到硬盘噪音没了,手接触硬盘也没有了微小的震动感,则硬盘休眠成功。

添加易有云服务

1、app启动流程说明

经过分析系统文件夹,发现,系统所有的启动脚本都是放在/etc/init.d/目录下面
在这里插入图片描述系统首先会执行rcS文件,rcS文件会索引当前目录下以大写S开头的文件,然后一个一个执行。
以S88Shell为例

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbincase "$1" instart)pidof shellinaboxdif [ $? -eq 0 ] ; thenecho "Start Shell Abort, already running"exitfiif [ -f /sata/.storage/appblock/shellinabox ] ; thenecho "Start ShellinAbox Abort, User Disabled"exitfishellinaboxd -b -t -s /:SSH:127.0.0.1echo "done.";;stop)killall shellinaboxdi=0while [ 1 ] ; dopidof shellinaboxdif [ $? -ne 0 -o $i -gt 10 ] ; thenbreakfiecho "sleep 1, wait"sleep 1((i++))doneecho "done.";;restart)$0 stop$0 start;;*)echo "Usage: /etc/init.d/S88shell {start|stop|restart}";;
esac

脚本里面定义了3个函数,sart,stop,restart。rcS脚本里面就是通过执行各个脚本的start函数来启动程序。

在start文件中会判断/sata/.storage/appblock/shellinabox 是否存在,如果存在,则脚本退出,不启动程序,如果不存在就启动。

说明启动脚本会根据shellinabox文件来启动shell程序。

通过分析文件夹名称也可以知道个大概,所有不需要开启自启的程序都会在appblock文件夹下面生成一个对应文件。那么问题来了,是什么程序来负责生成这些文件呢。

2、设置开机禁止运行服务

通过继续分析系统文件,发现了S23init脚本,init说明是在进行一些系统初始化操作。打开该文件

#!/bin/shif [ X$1 = "Xstop" ]; thenkillall hd_fan.shexit
fi#mount -o remount,rw //opt/bin/hd_fan.sh &mountpoint -q /sata
if [ $? -ne 0 ] ; thentouch /tmp/nosata.flagexit 0
fiecho "------- remunt to rw for S23 --------"
mount -o remount,rw /mkdir -p /sata/.storage
mkdir -p /sata/.storage/etc
if [ ! -d /sata/.storage/appblock ] ; thenmkdir -p /sata/.storage/appblocktouch /sata/.storage/appblock/aria2touch /sata/.storage/appblock/thundertouch /sata/.storage/appblock/transmissiontouch /sata/.storage/appblock/nfstouch /sata/.storage/appblock/rsynctouch /sata/.storage/appblock/minidlnatouch /sata/.storage/appblock/proftptouch /sata/.storage/appblock/phptouch /sata/.storage/appblock/shellinaboxtouch /sata/.storage/appblock/cupstouch /sata/.storage/appblock/linkeasetouch /sata/.storage/appblock/afpd
fimkdir -p /sata/home
chmod 755 /sata/homemkdir -p /sata/public
chmod 777 /sata/publicmkdir -p /sata/public/.recycle
chmod 777 /sata/public/.recycle
chown admin /sata/public/.recyclemkdir -p /sata/public/WWW
chmod 777 /sata/public/WWW
chown admin /sata/public/WWWmkdir -p /sata/.storage/mysql
chmod 777 /sata/.storage/mysqlmkdir -p /sata/.storage/tmp
chmod 777 /sata/.storage/tmp
rm -rf /sata/.storage/tmp/*mkdir -p /sata/public/USBDISK
chmod 755 /sata/public/USBDISK
chown admin /sata/public/USBDISK
rm -rf /sata/public/USBDISK/*if [ ! -e /sata/.storage/etc/passwd ] ; thencp -f /etc/passwd               /sata/.storage/etc/cp -f /etc/group                /sata/.storage/etc/cp -f /etc/shadow               /sata/.storage/etc/cp -f /etc/samba/smbpasswd      /sata/.storage/etc/cp -f /opt/rsync/rsyncd.secrets /sata/.storage/etc/
ficheck_file()
{file=$1grep -q admin ${file}if [ $? -ne 0 ]; then grep -q default ${file}if [ $? -ne 0 ]; thenecho 1  # not passelseecho 0  # passfielseecho 0  # passfi
}if [ -e /sata/one2017.flag ] ; thenresult=`check_file '/sata/.storage/etc/passwd'`diff -q /etc/passwd /sata/.storage/etc/passwdif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/passwd /etc/passwdchmod 644 /etc/passwdfiresult=`check_file '/sata/.storage/etc/group'`diff -q /etc/group /sata/.storage/etc/groupif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/group /etc/groupchmod 644 /etc/groupfiresult=`check_file '/sata/.storage/etc/shadow'`diff -q /sata/.storage/etc/shadow /etc/shadowif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/shadow /etc/shadowchmod 600 /etc/shadowfi
else

确实是会创建appblock文件夹及下面的文件。所以不需要不需要启动只需要在里面添加要创建的文件。

if [ ! -d /sata/.storage/appblock ] ; thenmkdir -p /sata/.storage/appblocktouch /sata/.storage/appblock/aria2touch /sata/.storage/appblock/thundertouch /sata/.storage/appblock/transmissiontouch /sata/.storage/appblock/nfstouch /sata/.storage/appblock/rsynctouch /sata/.storage/appblock/minidlnatouch /sata/.storage/appblock/proftptouch /sata/.storage/appblock/phptouch /sata/.storage/appblock/shellinaboxtouch /sata/.storage/appblock/cupstouch /sata/.storage/appblock/linkeasetouch /sata/.storage/appblock/afpd
fi

笔者已经将其他不需要启动的文件都添加进来了,修改重启系统后,发现没有生效。原因是,脚本会先判断appblock文件夹是否存在,如果文件夹不存在,则创建;如果存在就不会往文件夹里面写文件。

故添加不需要启动的服务后,要将硬盘中的appblock文件夹删除掉。

删除后,重启系统,正常了,在应用管理里面可以看到只有samba服务在运行。
在这里插入图片描述

3、添加易有云服务

3.1下载安装
下载易友云https://www.ddnsto.com/linkease/download/#/disk。下载对应的版本,由于没有对应的onespace版本,故下载linux通用版,linkease.arm文件。

为了方便查找,笔者将其放置到home目录下
在这里插入图片描述
记得chomod +x 添加可执行权限。./linkease.arm

[root@onespace home]# ./linkease.arm 
15:37:34 WARNING: device binding
15:37:34 WARNING: save preconfig failed, err= open /home/preconfig.data: read-only file system
15:37:34 WARNING: branch= other log= /tmp/logs178097771/LinkEase.log serial= ST-other-6DBC0973 rootDir= /sata/share
15:37:34 WARNING: Device 6DBC0973 Port 8897 Version 0.3.60 BuildVersion 660eb113f93f3bacf0a96fe9a88b7c5983a7a888 BuildDate .20210520.022302

访问ip:8897进行访问易有云,具体绑定操作见易有云官网。

3.2创建启动脚本

在/etc/init.d/文件夹中,创建S96linkease文件,名称要以大写S开头。
参照shell脚本写入如下内容,通过判断appblock/linkease文件来启动服务。脚本要加可执行权限。

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbincase "$1" instart)pidof linkease.armif [ $? -eq 0 ] ; thenecho "Start linkease Abort, already running"exitfiif [ -f /sata/.storage/appblock/linkease ] ; thenecho "Start linkease Abort, User Disabled"exitfi/home/linkease.arm & echo "done.";;stop)killall linkease.armecho "done.";;restart)$0 stop$0 start;;*)echo "Usage: /etc/init.d/S93linkease {start|stop|restart}";;
esac

3.3添加易有云到应用管理。
再次分析系统文件,发现在/opt/www有一个www的文件夹。在www文件夹下面有一个app文件夹。发现其中有如下文件,看到了熟悉samba shell 文件夹
在这里插入图片描述

打开shell文件夹发现里面有如下四个文件
在这里插入图片描述
将该目录下载到本地,发现app.png 就是应用管理里面的shell图标

在这里插入图片描述
依次开打开下其他文件

conf.js

{"pack": "shell","ver": "2.19","verno": 21900,"name": "SHELL","logo": "app.png","url": "/shell/","canstat": true,"canoff": true,"candel": false
}

可以看到里面配置的版本号就是应用管理里面的shell的版本号。

off.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin/etc/init.d/S88shell stopif [ $# -eq 0 ] ; thentouch /sata/.storage/appblock/shellinabox
fi

on.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binrm -f /sata/.storage/appblock/shellinabox
/etc/init.d/S88shell start

stat.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binpidof shellinaboxd > /dev/nullif [ $? -ne 0 ] ; thenecho -n "off"
elseecho -n "on"
fi

通过分析这个内容,发下这三个脚本就是,启动shell 关闭shell 查询shell运行状态的脚本。再结合app文件夹下的文件目录,与应用管理里面的任务是对应的。

由此可以说明,只需要按照app里面文件夹的格式,新建一个文件夹,该内容将会呈现在应用管理里面。笔者已经通过测试,发现确实如此。

接下来就好说了,只要将shell文件夹下面的文件的内容替换为linkease的,就可以实现在应用管理里面显示。
在app目录下面新建一个linkease文件,放入linkease logopng文件,再在对应的文件写入如下内容。


#conf.js
{"pack": "linkease","ver": "0.3.6","verno": 36000,"name": "linkease","logo": "app.png","url": "","canstat": true,"canoff": true,"candel": false
}#on.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binrm -rf /sata/.storage/appblock/linkease
/etc/init.d/S96linkease start#off.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin/etc/init.d/S96linkease stopif [ $# -eq 0 ] ; thentouch /sata/.storage/appblock/linkeasefi#stat.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binpidof linkease.arm > /dev/nullif [ $? -ne 0 ] ; thenecho -n "off"
elseecho -n "on"
fi

完成后,所有文件要加权限,chmod 755 。完成后,重启系统,即可在应用管理里面发现了linkease服务

在这里插入图片描述
至此,添加linkease服务完成,后续要添加其他的功能也可依据此方法操作。

备注:
1、推荐用FinalShell程序进行ssh操作,非常方便进行文件上传下载
在这里插入图片描述


2021-7-29硬盘休眠设置更新
经过测试发现如下命令是不起作用的,硬盘到了设定的时间后完全没反应,不会进入standby状态。经过多次测试均是如此

hdparm -S 60 /dev/sda1

硬盘休眠之路只能另求他法。于是开始寻找系统自带的休眠脚本,经过一番努力,发现休眠脚本位于

/opt/standby/

目录下,里面有start stop spindown等三个脚本
在这里插入图片描述
其中最主要的是spindown脚本,发现该脚本存在问题。那就是。
当设置的硬盘休眠时间到了,脚本会不管当前硬盘是否在读写,都会强制将硬盘设置为休眠状态。原因是,脚本用于判断判断硬盘状态的命令是错的。

其采用了 如下命令,该命令返回的只有两种状态
1、standby
2、active/idle

[root@onespace standby]# hdparm -C /dev/sda1/dev/sda1:drive state is:  standby无法判断硬盘当前是否在读写。原版的spindown脚本如下```bash
#Logging enable set to true  (/var/log/diskstate.log)
echo 1 > /proc/sys/vm/block_dump
# Where is your Ramdrive? 
# Check it out with  df -h or mount command.
# Possible Values Examples: /dev/shm , /run/shm 
mkdir -p /tmp/shm
ramdrive=/tmp/shm# Cyle time between checks, normally between 60 up to 300 Seconds. Protect the CPU/BUS Load.
time_cyle=60
time_spindown=$1# The Spindwon Time in Seconds for the harddisk drives, less then the time_cyle will only act on time_cyle.
# 300=5min, 600=10min, 900=15min, 1200=20min etc ..
time_disk_a=$time_spindown
time_disk_b=$time_spindown
time_disk_c=$time_spindown
time_disk_d=$time_spindown
time_disk_e=$time_spindown
time_disk_f=$time_spindown
time_disk_g=$time_spindown
time_disk_h=$time_spindown
time_disk_i=$time_spindown
time_disk_j=$time_spindown
time_disk_k=$time_spindown# Wich harddisk drives are handled to spindown
# No changes required, but if you need/like you can change.
#diskvolumes_spindown="a b c d e f g h i j k"
diskvolumes_spindown="a b c d e f g h i j k"# Wich harddisk drives are handled to send the apm = 255 command. (Disble AutoPowerManager in Firmware of the given Drives) 
# No changes required, but if you need/like you can change.
#diskvolumes_apm_off="a b c d e f g h i j k"
diskvolumes_apm_off="a b c d e f g h i j k"# Drives exist?
for disk in $diskvolumes_spindown; do hdparm -B /dev/sd$disk >/dev/null 2>&1; test $? = 0 && drives_spindown=$(printf "$drives_spindown"; printf $disk" "); done#apm off
for disk in $diskvolumes_apm_off; do hdparm -B /dev/sd$disk >/dev/null 2>&1; test $? = 0 && hdparm -B 255 /dev/sd$disk; done # Set ones on start time variable time_noise_$(disk), like noise from harddrive
for disk in $diskvolumes_spindown; do eval time_noise_${disk}=$(date +"%s"); donefor disk in $diskvolumes_spindown; do eval spindown_flag_${disk}=false; done# Build onece the tempfiles 
if [ ! -f $ramdrive/diskstate1 ]; then touch $ramdrive/diskstate1;fi 
if [ ! -f $ramdrive/diskstate2 ]; then touch $ramdrive/diskstate2;fi# Here we go... 
while [ true ] ; do# cycle it to test for activity mv $ramdrive/diskstate1 $ramdrive/diskstate2 cat /proc/diskstats > $ramdrive/diskstate1# Loop through all array disks and spin down idle disks. for disk in $drives_spindown; dodiskstat1=`grep sd$disk $ramdrive/diskstate1`diskstat2=`grep sd$disk $ramdrive/diskstate2`#if [ "$(diff $ramdrive/diskstate1 $ramdrive/diskstate2 | grep sd$disk )" = "" ]; thenif [ X"$diskstat1" = X"$diskstat2" ]; thentime_silent=$(date +"%s")time_noise=$(eval echo \${time_noise_${disk}})time_disk=$(eval echo \${time_disk_${disk}})time_idle=$(($time_silent - $time_noise))if [ $time_idle -ge $time_disk ]; then STATUS0=`hdparm -C /dev/sd$disk | sed -n '3p' | awk '{print $4}'`if [ X"$STATUS0" != "Xstandby" ];thenspindown_flag=$(eval echo \${spindown_flag_${disk}})if [ $spindown_flag = true ];thenecho `date` "/dev/sd$disk was activated" >> /tmp/nginx/error.log/opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"wakeup", "content":{} }'eval spindown_flag_${disk}=falseeval time_noise_${disk}=$(date +"%s")elseecho `date` "set /dev/sd$disk standby" >> /tmp/nginx/error.log
#                        /opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"sleep", "content":{} }'
#                        sleep 2synchdparm -Y /dev/sd$disk >/dev/null 2>&1;eval spindown_flag_${disk}=true	fififielseeval time_noise_${disk}=$(date +"%s")spindown_flag=$(eval echo \${spindown_flag_${disk}})if [ $spindown_flag = true ];thenecho `date` "/dev/sd$disk was activated 1" >> /tmp/nginx/error.log/opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"wakeup", "content":{} }'eval spindown_flag_${disk}=falsefifidone # Cycle Waitsleep $time_cyle
done

而且该脚本写的太复杂了,而且逻辑不清楚,于是修改如下:

#!/bin/shrm -rf /tmp/spindown.log
oldstate=''
n=`expr $1 '*' 6`
n1=$n
echo "n is " $n
while :; do
#!/bin/sh #!/bin/sh rm -rf /tmp/spindown.log
oldstate=''
n=`expr $1 '*' 6`
n1=$n
echo "n is " $n
while :; donewstate=$(grep "sda1" /proc/diskstats) echo date $newstate >> /tmp/spindown.logif [ "$newstate" = "$oldstate" ]; thenn1=$(($n1 - 1))
#       [ "$n" != 0 ] || hdparm -y /dev/"$1"if [ "$n1" == 0 ]; thenhdparm -Y /dev/sda1echo "set hd standby ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logfielsen1="$n"oldstate=$newstatefistate=`hdparm -C /dev/sda1 | sed -n '3p' | awk '{print $4}'`if [ "$state" != "standby" ]; thenecho `date` "hd is actived ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logelsen1="$n"echo `date` "hd is sleep ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logfilogsize=`ls -l /tmp/spindown.log | awk '{print $5}'`if [ $logsize -ge 100000 ]; thenrm -rf /tmp/spindown.logfisleep 10
done 

运行逻辑说明:
1、通过判断硬盘的读取状态来确定硬盘是否处于空闲状态
2、只有硬盘持续空闲时间到了设定睡眠时间,才会将硬盘置为休眠状态、

这篇关于猫盘onespace x3p系统使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543354

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安