Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例
Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例
- 一、Opencv大图找小图说明
- 二、Opencv的window安装
- 1.下载windows下的安装包
- 2.安装
- 3.Java中Opencv加载测试
- 三、Java中通过Opencv进行模板匹配大图找小图
- 四、进行多图查找
- 五:案例下载bilibili视频
- 1.bilibili网站安装下载视频插件
- 2.业务流程分析
- 3.代码实现
- 3.0 先截需要的几个图
- 3.1代码片段
- 3.2 程序效果截图
- 3.3 源码下载
本文将介绍Opencv在windows下的安装,并使用Java操作Opencv进行行大图找小图测试,最后通过应用大图找小图功能来实现bilibili的视频下载。
一、Opencv大图找小图说明
以下来自chatGpt3.5模型的回答:
Opencv是一款开源的计算机视觉库,可以用于图像处理、目标检测、人脸识别等领域。在Opencv中,可以使用模板匹配算法来实现大图找小图的功能。
模板匹配算法是一种基于像素级别的匹配算法,它的基本思想是在大图中寻找与小图相似的区域。具体实现过程如下:
读取大图和小图,并将它们转换为灰度图像。
定义一个滑动窗口,在大图中滑动,并将窗口中的像素与小图进行比较。
计算窗口中像素与小图像素的差异,得到一个匹配度。
将匹配度保存到一个矩阵中,矩阵的大小与大图相同。
在矩阵中找到最大匹配度的位置,即为小图在大图中的位置。
Opencv提供了多种模板匹配算法,包括平方差匹配、归一化平方差匹配、相关匹配和归一化相关匹配等。不同的算法适用于不同的场景,需要根据实际情况选择合适的算法。
总之,Opencv提供了强大的图像处理功能,可以实现大图找小图等多种应用。
二、Opencv的window安装
1.下载windows下的安装包
官网的路径是:https://opencv.org/
我下载的是4.2.0,下载地址(官网)为:https://udomain.dl.sourceforge.net/project/opencvlibrary/4.2.0/opencv-4.2.0-vc14_vc15.exe
或者链接(非官网,速度快些):https://nchc.dl.sourceforge.net/project/opencvlibrary/4.2.0/opencv-4.2.0-vc14_vc15.exe
2.安装
双击opencv-4.2.0-vc14_vc15.exe安装即可,我这里安装到D:\ProgramFiles\opencv
安装后的目录如:

3.Java中Opencv加载测试
引入opencv-420.jar包:
新建一个Java的maven工程,然后将安装目录下的build\java\opencv-420.jar复制到工程的lib目录
pom.xml中采用本地引入方式如下:
<!-- opencv start --><dependency><groupId>cn.gzsendi</groupId><artifactId>opencv-420</artifactId><version>0.0.1</version><scope>system</scope><systemPath>${pom.basedir}/lib/opencv-420.jar</systemPath></dependency><!-- opencv end -->
将
build\java\x64\opencv_java420.dll放在java工程的resoure目录下
代码测试加载Opencv是否正常
package cn.lihua;
import java.net.URL;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;public class OpencvTest {public static void main(String[] args) throws InterruptedException {// 加载动态库,放在资源目录下,推荐URL url = ClassLoader.getSystemResource("opencv_java420.dll");//另一种加载的方式,放在环境变量中,需要配置//System.loadLibrary(Core.NATIVE_LIBRARY_NAME);System.load(url.getPath());Mat source = Imgcodecs.imread("images/source.jpg");HighGui.imshow("测试", source);HighGui.waitKey();}
}
执行代码后,如果能打开图像,则opencv环境正常。
三、Java中通过Opencv进行模板匹配大图找小图
Java中进行大图找小图主要如下步骤:
1.导入Opencv库
2.加载图像
3.进行模板匹配
4.获取匹配结果
5.绘制匹配结果
6.显示结果
对应的代码如下:
package cn.lihua.modules.test;import java.net.URL;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;public class TemplateMatchingTest {public static void main(String[] args) {String sourceImg = "images/source.bmp";String smallImg = "images/smallImg.bmp";new TemplateMatchingTest().templateMatching(sourceImg, smallImg);}public void templateMatching(String sourceImg,String smallImg) {// 1.导入Opencv库URL url = ClassLoader.getSystemResource("opencv_java420.dll");System.load(url.getPath());// 2.加载图像Mat src = Imgcodecs.imread(sourceImg);// 待匹配图片Mat template = Imgcodecs.imread(smallImg);// 获取匹配模板// 3.进行模板匹配// 创建一个输出图像Mat outputImage = new Mat(src.rows(), src.cols(), src.type());Imgproc.matchTemplate(src, template, outputImage, Imgproc.TM_CCOEFF_NORMED);// 4.获取匹配结果,查找最大匹配值Core.MinMaxLocResult result = Core.minMaxLoc(outputImage);Point matchLoc = result.maxLoc;double similarity = result.maxVal; //匹配度int x = (int) matchLoc.x; //小图大大图中的x坐标int y = (int) matchLoc.y; //小图大大图中的y坐标System.out.println(x + "," + y + " similarity: " + similarity);//将查找到的结果标上框框Imgproc.rectangle(src,new Point(x,y),new Point(x+template.cols(),y+template.rows()),new Scalar( 0, 0, 255),2,Imgproc.LINE_AA);//5.显示结果HighGui.imshow("模板匹配", src);HighGui.waitKey();}}
source.bmp

smallImg.bmp
![]()
模板匹配后:

四、进行多图查找
三步骤中的查询是将匹配上的最佳的子图返回,有时可能子图中会有多个,也希望能把所有的都返回,可以在查询到第一个后,不断的递归裁剪并继续匹配,最终返回所有的,
示例代码如下:
package cn.lihua.modules.test;import java.net.URL;import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** 返回多个位置的例子* @author liujh**/
public class TemplateMatchingMultiResultExample {public static void main(String[] args) {String sourceImg = "images/big1.bmp";String smallImg = "images/small1.bmp";new TemplateMatchingMultiResultExample().templateMultiMatching(sourceImg, smallImg);}public void templateMultiMatching(String sourceImg,String smallImg) {// 1.导入Opencv库URL url = ClassLoader.getSystemResource("opencv_java420.dll");System.load(url.getPath());// 2.加载图像Mat largeImage = Imgcodecs.imread(sourceImg);//待匹配图片Mat smallImage = Imgcodecs.imread(smallImg);// 获取匹配模板1// 创建输出图像Mat outputImage = new Mat(largeImage.rows(), largeImage.cols(), largeImage.type());// 进行模板匹配Imgproc.matchTemplate(largeImage, smallImage, outputImage, Imgproc.TM_CCOEFF_NORMED);// 设置匹配阈值double threshold = 0.8;// 循环遍历所有匹配结果while (true) {// 查找最大匹配值Core.MinMaxLocResult result = Core.minMaxLoc(outputImage);Point matchLoc = result.maxLoc;double maxVal = result.maxVal;// 如果匹配值小于阈值,则退出循环if (maxVal < threshold) {break;}System.out.println(matchLoc.x + "," + matchLoc.y + " similarity: " + maxVal);// 在大图中标出匹配位置Imgproc.rectangle(largeImage, matchLoc, new Point(matchLoc.x + smallImage.cols(),matchLoc.y + smallImage.rows()), new Scalar(0, 0, 255), 2);// 将匹配位置的值设置为0,以便下一次匹配Imgproc.rectangle(outputImage, matchLoc, new Point(matchLoc.x + smallImage.cols(),matchLoc.y + smallImage.rows()), new Scalar(0, 0, 0), -1);}HighGui.imshow("模板匹配", largeImage);HighGui.waitKey();}
}
big.bmp

small.bmp

匹配结果:

五:案例下载bilibili视频
经过上面的测试后,我们具备了通过大图找小图的能力,接下来我们通过实践一下,写程序将bilibili网站的视频下载下来。
思路:
1.bilibili网站默认没有下载视频的插件,首先安装下载插件
2.手上尝试下载视频,找出下载视载可以自动化操作的步骤
3.通过大图找小图功能,并结合Java的Robot类实现自动化找到下载视频需要的对应图标和位置,然后模拟点击,达到自动下载的效果。
1.bilibili网站安装下载视频插件
上https://bilibilihelper.com/网站进行插件下载
得到bilibili-helper-u-2.5.23.8.zip离线插件包
chrome浏览器地址栏输入
chrome://extensions/,开发模式勾上,拖动bilibili-helper-u-2.5.23.8.zip至浏览器进行安装

安装成功后,点一个视频看(一定需要点击播放视频)右上角会出现下载插件的小图标

2.业务流程分析
下载一个视频的步骤如下,可以看出来步骤是这样:
点击要下载的视频链接,点右上角的插件图标,在弹出的窗口中点击1080P高清图标,再点一下图标会出现点击下载,再点一下点击下载即可

所有视频链接的下载规律是:
前面P1、P2、P3、P4视频要点击的位置需要定位,第5个视频开始后面的视频要点击的位置都是和第5个视频一样,通过这个规律,我们可以将P1-P4视频的点击位置,通过大图找小图功能来定位,P5和后面的视频就直接用绝对位置定位进行点击,(其实都可以用绝对定位,但主要想演示就用一下Opencv的大图找小图功能)

这样经过分析后,整个视频下载的业务逻辑如下
1.将P1-P4的视频的链接截好小图,右上角插件图示、1080高清、点击下载等图标截好小图,供后面程序进行匹配使用
2.P1-P4的视频下载,通过大图找小图进行定位,通过Java的Robot类进行模拟点击实现视频下载
3.P5及以后的视频,通过直接绝对定位到屏幕位置点击进行视屏下载
4.视频最后的几个也简单通过绝对定位下载,和P5视频的位置不相同,也需要处理一下,我们通过绝对定位处理(此案例主要是为了练习opencv大图找小图,所有的下载其实都能通过绝对定位位置下载)
下图为最后几集的点击,可以看到不再是和P5视屏一样的位置,需要每次向下移动一行的距离

3.代码实现
3.0 先截需要的几个图

注:程序启动前最好在你的电脑上重新截图
3.1代码片段
定义OpencvService接口用来实现大图找小图
package cn.lihua.modules.bilibili.service;import java.util.List;import cn.lihua.modules.bilibili.model.FindImgDto;public interface OpencvService {/*** 大图找小图* @param bigImg* @param smallImg* @return*/FindImgDto templateMatching(String bigImg,String smallImg);/*** 大图找小图* @param bigImg* @param smallImg* @param thresholdValue 匹配度* @return*/FindImgDto templateMatching(String bigImg,String smallImg,Double thresholdValue);/*** 大图找小图,返回多个* @param bigImg* @param smallImg* @param thresholdValue 匹配度* @return*/List<FindImgDto> templateMultiMatching(String bigImg,String smallImg,Double thresholdValue);List<FindImgDto> templateMultiMatching(String bigImg,String smallImg);}
定义BilibiliVideoDownService进行视频的下载
/*** 下载Bilibili视频* @author jxlhl*/
public interface BilibiliVideoDownService {public void exportStart() throws Exception;}
Robot类用于模拟移动和点击鼠标
try {robot = new Robot();//核心机器人类,键盘或鼠标事件的重放执行。} catch (AWTException e) {logger.error("error",e);}
全屏截图,用于每次大图找小图时使用
/*** 全屏截图*/private void createScreenCapture() {int width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();int height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();try {BufferedImage screenShotImage = robot.createScreenCapture(new Rectangle(0, 0, width, height));File sourceImg = new File("images/fullScreen.jpg");ImageIO.write(screenShotImage, "jpg", sourceImg);} catch (Exception e) {logger.error("error",e);}}
鼠标移动与点击的代码
/** 移到指定的位置并左键点击* */private void mouseMoveAndClick(int clientX, int clientY) throws InterruptedException{mouseMove(clientX, clientY);robot.delay(1000);//随即休眠0-2秒mouseClick();}/*** 点击鼠标左键* @throws InterruptedException */private void mouseClick() throws InterruptedException{robot.mousePress(InputEvent.BUTTON1_MASK);//左键robot.delay(100);robot.mouseRelease(InputEvent.BUTTON1_MASK);//左键}/*** 移动鼠标到指定的坐标*/private void mouseMove(int clientX, int clientY){//不太明白这里为什么这样写,但这一行代码结合缩放比例可以稍微解决定位不准确的问题。robot.mouseMove(-1, -1);//我的电脑是200%,因此除以2String screenPercent = "200";double rate = Integer.parseInt(screenPercent)/100d;//增加一点点的随机数,防检测robot.mouseMove((int)(clientX/rate) , (int)(clientY/rate));}
下载某一个视频的逻辑代码
/*** 下载第{pageNumber}个视频* @param pageNumber* @param totalCount* @throws Exception*/private void downLoad(int pageNumber,int totalCount) throws Exception{Thread.sleep(3000l);logger.info("开始下载第{}个视频,剩余{}个",pageNumber,(totalCount-pageNumber));//截图全屏,然后写入images/fullScreen.jpgcreateScreenCapture();//进行大图找小图测试FindImgDto findImgDto = null;//前面的4个视频,通过大图找小图定位位置if(pageNumber<=4){findImgDto = opencvService.templateMatching(fullScreen,"images/template/P"+pageNumber+".bmp");logger.info(JsonUtil.toJSONString(findImgDto));//找到的坐标点击时,x坐标向右靠100,可以点击得更中心些mouseMoveAndClick(findImgDto.getClientX() + 100 , findImgDto.getClientY());}else{if(pageNumber <= 195){//第5-第195个视频都点击和第5个视频所在的位置即可,1768,1011(你需要换成你的电脑上对应的位置)mouseMoveAndClick(1768,1011);}else{//最后5个视频特殊处理,直接定位进行点击//第196个视频if(pageNumber == 196){mouseMoveAndClick(1768,1080);//(你需要换成你的电脑上对应的位置)}//第197个视频if(pageNumber == 197){mouseMoveAndClick(1768,1150);//(你需要换成你的电脑上对应的位置)}if(pageNumber == 198){mouseMoveAndClick(1768,1220);//(你需要换成你的电脑上对应的位置)}if(pageNumber == 199){mouseMoveAndClick(1768,1280);//(你需要换成你的电脑上对应的位置)}if(pageNumber == 200){mouseMoveAndClick(1768,1340);//(你需要换成你的电脑上对应的位置)}}}//不断等待查找右上角的下载插件图标findImgDto = new FindImgDto();while(!findImgDto.isIfFind()){Thread.sleep(3000l);createScreenCapture();findImgDto = opencvService.templateMatching(fullScreen,click1);mouseMoveAndClick(findImgDto.getClientX() , findImgDto.getClientY());}//不断等待查找1080高清图标findImgDto = new FindImgDto();while(!findImgDto.isIfFind()){Thread.sleep(3000l);createScreenCapture();findImgDto = opencvService.templateMatching(fullScreen,click2);mouseMoveAndClick(findImgDto.getClientX() , findImgDto.getClientY());robot.delay(100);mouseMove(findImgDto.getClientX()+300, findImgDto.getClientY());}//不断等待查找点击下载图标findImgDto = new FindImgDto();while(!findImgDto.isIfFind()){Thread.sleep(3000l);createScreenCapture();findImgDto = opencvService.templateMatching(fullScreen,click3);mouseMoveAndClick(findImgDto.getClientX() , findImgDto.getClientY());robot.delay(100);mouseMove(findImgDto.getClientX()+300, findImgDto.getClientY());}//点击下载图标后,需要再点一下右上角的插件图标复原findImgDto = new FindImgDto();while(!findImgDto.isIfFind()){Thread.sleep(3000l);createScreenCapture();findImgDto = opencvService.templateMatching(fullScreen,click1);mouseMoveAndClick(findImgDto.getClientX() , findImgDto.getClientY());robot.delay(100);}}
下载所有视频的逻辑代码
public void exportStart() throws Exception {//0.下载Bilibili视频自动化操作logger.info("BilibiliVideoDownService Start....");//休息5秒等待程序启动了切换到下载网站页面Thread.sleep(5000l);//需要下载的视频数量int totalCount = 200;try {//遍历下载每一个视频for(int i =1 ;i<=totalCount;i++){downLoad(i,totalCount);}//阻塞判断是否下载完成ifFinishedDownload();logger.info("all completed."); } catch (Exception e) {logger.error("errror",e);} finally {}logger.info("BilibiliVideoDownService success..");}
3.2 程序效果截图

3.3 源码下载
github: https://github.com/jxlhljh/opencvBilibiliDownloadTest.git
gitee: https://gitee.com/jxlhljh/opencvBilibiliDownloadTest.git
相关文章:
Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例
Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五:案例下载bilibili视…...
肠道健康从核心菌属开始:肠道菌群的关键
谷禾健康 5月29日,是世界肠道健康日。肠道是人体最重要的消化系统之一,与人体健康紧密相关。而肠道菌群作为肠道重要组成部分,在肠道健康中发挥着重要的作用。 编辑 由于基因、环境、饮食、药物等因素的影响,每个人的肠道菌群都…...
深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用
大家好,我是微学AI,今天给大家介绍一下深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用,NASNet是由Google Brain团队开发的一种具有自动搜索能力的神经网络模型,利用强化学习和进化算法等技术来自动地搜索最优的神经网络架构。NASNet模型的设计灵感…...
碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——随机森林、决策树、KNN 和多层感知器 (MLP) 预测分析
文章目录 效果一览文章概述研究内容环境准备源码设计KNNRandom ForestDecision TreeMLPModel Evaluation学习总结参考资料效果一览...
人体检测技术之毫米波雷达
人体检测技术之毫米波雷达 1.概述 智能人脸/视频锁领域的人体检测需求是要求远距离达到1m左右即可,一旦在此距离内检测人,则锁唤醒进行人脸识别,视频录制等操作。所以,人体检测技术非常关键。 选型主要是几个维度: 1.支持检测的距离范围,能否准确输出距离信息 2.支持…...
“Chain of Thought Reasoning“ 和 “Chain Prompts“ 是什么
"Chain of Thought Reasoning" 和 "Chain Prompts" 是什么 1. "Chain Prompts" 是什么2. “Chain of Thought Reasoning” 是什么 1. “Chain Prompts” 是什么 “Chain Prompts” 是指一系列相关的提示,它们之间有逻辑上的联系和依赖关系。用户…...
signal
读信号,dqs 是对齐到dq的边沿, 写信号,dqs 的边沿是对到中间的。 spec 就是这样规定的。我们在dq的最中间的采样,肯定是最安全的。 dqs 是对齐到dq的边沿 , 在silicon 内部,还是通过移位完成的。 rl: re…...
深度研究微软的资产负债表和财务状况以及未来投资价值
来源:猛兽财经 作者:猛兽财经 微软股票的关键指标 猛兽财经认为,微软公布的2023财年第三季度财务业绩,有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%,从2022财年第…...
Mac电脑删除第三方软件工具CleanMyMac X
经常使用Mac的人都知道,Mac除了可以在AppStore下载应用程序,还有许多软件是需要在网页上搜索下载的第三方软件。那么这类第三方软件软件除了下载方式不同之外还有什么是和从App store下载的软件有区别的吗?答案是肯定的,那就是这些…...
leetcode174. 地下城游戏(java)
地下城游戏 leetcode174. 地下城游戏题目描述 动态规划解题思路代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/dungeon-game 题目描述 恶魔们抓住了公主并将她关在了地下城 …...
信号与系统复习笔记——傅里叶变换
信号与系统复习笔记——傅里叶变换 周期信号的傅里叶级数表示 特征函数 假设LTI系统的输入为 x ( t ) e s t x(t) e^{st} x(t)est 输出为: y ( t ) e s t ∗ h ( t ) ∫ − ∞ ∞ e s ( t − τ ) h ( τ ) d τ e s t ∫ − ∞ ∞ e − s τ h ( τ ) d…...
Allegor17.2版本WIN11系统CIS配置提示错误解决方案
错误提示: ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中,驱动程序和应用程序之间的体…...
Java设计模式七大原则-合成聚合复用原则
🧑💻作者:猫十二懿 ❤️🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 合成-聚合复用原则 1、合成-聚合复用原则介绍 合成/聚合复用原则(Composition/Aggregatio…...
SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...
SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…...
Melody 监控(四十九)
当新的世界出现,请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…...
Shell脚本管道符常用搭配命令
1.sort sort命令——以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort [选项] 文件名 cat file | sort [选项] 常用选项 选项作用-n按照数字进行…...
基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统
运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…...
算法模板(3):搜索(5):其他
搜索 模拟退火 模拟退火一个很关键的是,看看枚举到每一个方案是不是可能的。 3167. 星星还是树 在二维平面上有 n 个点,第 i 个点的坐标为 ( x i , y i ) (x_i,y_i) (xi,yi)。请你找出一个点,使得该点到这 n 个点的距离之和最小。这…...
AWS CodeWhisperer 心得体会:安装与使用
大家好,今天我要和大家分享一下我在使用 AWS CodeWhisperer 这个工具时的心得体会。首先,让我们了解一下什么是 AWS CodeWhisperer。 什么是 AWS CodeWhisperer? AWS CodeWhisperer 是一个用于帮助开发者在 AWS 云平台上更轻松地编写、测试…...
高级查询 — 子查询
关于嵌套查询(子查询) 1.概述 子查询是在一个查询中嵌套另一个查询的查询语句。内部查询从外部查询或数据库中提取数据,然后使用这些数据来执行内部查询。出现在其他语句中的 select 语句,称为嵌套查询或子查询。外部的查询语句…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...
Centos 7 服务器部署多网站
一、准备工作 安装 Apache bash sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd创建网站目录 假设部署 2 个网站,目录结构如下: bash sudo mkdir -p /var/www/site1/html sudo mkdir -p /var/www/site2/html添加测试…...





