FindDiff_Qt找不同项目

文章目录

  • 项目简介
  • 源代码
    • widget.h
    • widget.cpp
    • widget.ui
    • 配置文件
      • 找不同.json

项目简介

  • 开发平台

    • win10
    • Qt6.6
    • msvc2022
  • 简介

    微信上有一些好玩的游戏, 找不同一种比较轻松有趣的游戏,也曾经在街机上被坑过N币, 玩了几次后,发现还是太难了,于是开始截屏放大,慢慢找,再然后就发展到截图发送到QQ的我的电脑里,用程序查找标记

    看效果:

    • 截屏的图

在这里插入图片描述

在这里插入图片描述

  • FindDiff_Qt Qt 版本的找不同
    • 交互性强点
    • 用 ps 2019 切片比较方便
    • 默认 qq的 “我的电脑”的目录并自动监视该目录,当有新的文件出现时,会自动加载并查找不同处,而且每次对比前会自动删除该目录下的其他jpg图片,需要注意

源代码

widget.h

#pragma once#include <QImage>
#include <QWidget>
#include <QFileSystemWatcher>
#include "ui_widget.h"namespace Ui {
class Widget;
}class MWidget : public QWidget
{Q_OBJECTpublic:explicit MWidget(QWidget *parent = nullptr);~MWidget();private slots:void on_pushButton_start_clicked();bool loadImage();void showImages();void findDifferent();void setFrameColor(QColor color);void on_pushButton_color_clicked();void on_spinBox_valueChanged(int arg1);void on_horizontalSlider_valueChanged(int value);void on_spinBox_x1_valueChanged(int arg1);void on_spinBox_y1_valueChanged(int arg1);void on_spinBox_x2_valueChanged(int arg1);void on_spinBox_y2_valueChanged(int arg1);void on_spinBox_w_valueChanged(int arg1);void on_spinBox_h_valueChanged(int arg1);void on_comboBox_currentIndexChanged(int index);public:Ui::Widget *ui;private:QImage srcImg , src, dst, result;int   label_src1_height;int   label_src2_height;int label_result_height;QColor frameColor = QColor("#55ffff");QFileSystemWatcher fwatcher;QString workPath;// QWidget interface
protected:void resizeEvent(QResizeEvent *event);
};

widget.cpp

#include "widget.h"
#include "qout.h"
#include "ui_widget.h"#include <QColorDialog>
#include <QDir>
#include <QDir>
#include <QFile>
#include <QFileSystemWatcher>
#include <QPainter>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>MWidget::MWidget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ui->label_src1->setAlignment(Qt::AlignCenter);ui->label_src2->setAlignment(Qt::AlignCenter);ui->label_result->setAlignment(Qt::AlignCenter);ui->pushButton_start->setFocusPolicy(Qt::StrongFocus);ui->pushButton_start->setFocus(Qt::TabFocusReason);ui->pushButton_start->setAutoFillBackground(true);ui->pushButton_start->setAutoDefault(true);//    qout << focusNextChild() << focusWidget();//    qout << focusNextChild() << focusWidget();//    qout << focusNextChild() << focusWidget();ui->frame->setAutoFillBackground(true);ui->frame->setMaximumWidth(200);setFrameColor(frameColor);//    workPath = "E:/Users/Administrator/Documents/Tencent Files/273135482/FileRecv/MobileFile";workPath = QDir::fromNativeSeparators(ui->lineEdit->text());fwatcher.addPath(workPath);connect(&fwatcher, &QFileSystemWatcher::fileChanged,this,[](const QString &path){qout << path << "fileChanged";});connect(&fwatcher, &QFileSystemWatcher::directoryChanged,this,[this](const QString &path){qout << path << "directoryChanged";on_pushButton_start_clicked();});QFile file("D:/Project/qtdemos/32_opencv/FindDiff_Qt/找不同.json");  // 数据文件路径if(file.open(QFile::ReadOnly)) {auto byte = file.readAll();QJsonParseError JsonParseError ;QJsonDocument doc = QJsonDocument::fromJson(byte, &JsonParseError);if(JsonParseError.error)qout << JsonParseError.errorString();QSignalBlocker b(ui->comboBox);ui->comboBox->clear();QJsonArray docJsonArray = doc.array();for (int i = 0; i < docJsonArray.size(); ++i) {QJsonObject obj = docJsonArray.at(i).toObject();QString title = obj["title"].toString();int x1 = obj["x1"].toInt();int y1 = obj["y1"].toInt();int x2 = obj["x2"].toInt();int y2 = obj["y2"].toInt();int w  = obj["w"].toInt();int h  = obj["h"].toInt();QString itemTxt("%1:\tP1(%2,%3)\tP2(%4,%5)\t%6 x %7");itemTxt = itemTxt.arg(title).arg(x1).arg(y1).arg(x2).arg(y2).arg(w).arg(h);ui->comboBox->addItem(itemTxt);QVariantList list;list << x1 << y1 << x2 << y2 << w << h;ui->comboBox->setItemData(i,list);}}on_comboBox_currentIndexChanged(0);
}MWidget::~MWidget()
{delete ui;
}void MWidget::on_pushButton_start_clicked()
{auto ok = loadImage();if( ok )findDifferent();showImages();
}bool MWidget::loadImage()
{workPath = QDir::fromNativeSeparators(ui->lineEdit->text());qout << workPath;QDir dir(workPath);if(!dir.exists())return false;QStringList nameFilters;nameFilters << "*.jpg";QStringList fileNames = dir.entryList(nameFilters,QDir::Files,QDir::Name);qout << fileNames;if(fileNames.isEmpty())return false;QSignalBlocker block(fwatcher);for (int i = 0; i < fileNames.size()-1; ++i) {dir.remove(fileNames.at(i));}QString imageFile( dir.absoluteFilePath(fileNames.last()) );srcImg.load(imageFile);src = srcImg.copy(ui->spinBox_x1->value(),ui->spinBox_y1->value(),ui->spinBox_w ->value(),ui->spinBox_h ->value());dst = srcImg.copy(ui->spinBox_x2->value(),ui->spinBox_y2->value(),ui->spinBox_w ->value(),ui->spinBox_h ->value());//    找不同//    src = srcImg.copy(16,294,1096,729);//    dst = srcImg.copy(16,1055,1096,729);//    小花找不同//    src = srcImg.copy(119,452,465,1057);//    dst = srcImg.copy(588,452,465,1057);result = dst;return true;
}void MWidget::showImages()
{qout << "showImages";if(src.isNull())return ;ui->label_src1  ->setPixmap(QPixmap::fromImage(src)     .scaledToHeight(ui->label_src1  ->height()-ui->label_src1->frameWidth() * 2));ui->label_src2  ->setPixmap(QPixmap::fromImage(dst)     .scaledToHeight(ui->label_src2  ->height()-ui->label_src1->frameWidth() * 2));ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::findDifferent()
{qout << "findDifferent";if(src.isNull())return ;QPainter painter;result = src;result = result.convertToFormat(QImage::Format_Grayscale8);result = result.convertToFormat(QImage::Format_RGB32);painter.begin(&result);painter.setPen(frameColor);for (int i = 0; i < src.width(); ++i) {for (int j = 0; j < src.height(); ++j) {QRgb srcPix = src.pixel(i,j);QRgb dstPix = dst.pixel(i,j);if ( ( qAbs( (qRed  (srcPix)  -qRed(dstPix) ) )  > ui->spinBox->value()  // 红色||qAbs( (qGreen(srcPix)-qGreen(dstPix) ) )  > ui->spinBox->value()  // 绿色||qAbs( (qBlue (srcPix)-qBlue (dstPix) ) )  > ui->spinBox->value() ) // 蓝色){painter.drawPoint(i,j);}}}painter.end();
}void MWidget::setFrameColor(QColor color)
{auto frame = ui->frame;QPalette p = frame->palette();p.setBrush( QPalette::Window, color);frame->setPalette(p);}void MWidget::resizeEvent(QResizeEvent */*event*/)
{if(src.isNull())return;showImages();
}void MWidget::on_pushButton_color_clicked()
{auto color = QColorDialog::getColor(QColor(85,255,255));frameColor = color;setFrameColor(color);if(src.isNull()) return;findDifferent();ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::on_spinBox_valueChanged(int arg1)
{ui->horizontalSlider->setValue(arg1);
}void MWidget::on_horizontalSlider_valueChanged(int value)
{ui->spinBox->setValue(value);findDifferent();ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::on_spinBox_x1_valueChanged(int arg1)
{on_pushButton_start_clicked();}
void MWidget::on_spinBox_x2_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_y1_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_y2_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_w_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_h_valueChanged(int arg1)
{on_pushButton_start_clicked();
}void MWidget::on_comboBox_currentIndexChanged(int index)
{auto vars = ui->comboBox->itemData(index).value<QVariantList>();qout << "=======" << index << vars;QSignalBlocker x1( ui->spinBox_x1 );QSignalBlocker y1( ui->spinBox_y1 );QSignalBlocker x2( ui->spinBox_x2 );QSignalBlocker y2( ui->spinBox_y2 );QSignalBlocker w ( ui->spinBox_w  );QSignalBlocker h ( ui->spinBox_h  );ui->spinBox_x1->setValue(vars.at(0).toInt());ui->spinBox_y1->setValue(vars.at(1).toInt());ui->spinBox_x2->setValue(vars.at(2).toInt());ui->spinBox_y2->setValue(vars.at(3).toInt());ui->spinBox_w ->setValue(vars.at(4).toInt());ui->spinBox_h ->setValue(vars.at(5).toInt());
}

widget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Widget</class><widget class="QWidget" name="Widget"><property name="geometry"><rect><x>0</x><y>0</y><width>873</width><height>672</height></rect></property><property name="minimumSize"><size><width>0</width><height>300</height></size></property><property name="windowTitle"><string>Form</string></property><layout class="QGridLayout" name="gridLayout_3"><item row="0" column="0"><widget class="QLabel" name="label_src1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property><property name="buddy"><cstring>bottomright</cstring></property></widget></item><item row="0" column="1"><widget class="QLabel" name="label_result"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property></widget></item><item row="1" column="0"><widget class="QLabel" name="label_src2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property></widget></item><item row="1" column="1"><widget class="QFrame" name="bottomright"><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QWidget" name="widget_2" native="true"><layout class="QGridLayout" name="gridLayout_2"><item row="0" column="0" colspan="4"><widget class="QComboBox" name="comboBox"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><item><property name="text"><string>找不同             p1(16,293)   p2(16,1055)  1096 x 729</string></property></item><item><property name="text"><string>小花找不同      p1(119,452) p2(588,452)   465 x 1057</string></property></item></widget></item><item row="1" column="0"><widget class="QLabel" name="label"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>x1</string></property></widget></item><item row="1" column="1"><widget class="QSpinBox" name="spinBox_x1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>119</number></property></widget></item><item row="1" column="2"><widget class="QLabel" name="label_7"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>x2</string></property></widget></item><item row="1" column="3"><widget class="QSpinBox" name="spinBox_x2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>588</number></property></widget></item><item row="2" column="0"><widget class="QLabel" name="label_2"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>y1</string></property></widget></item><item row="2" column="1"><widget class="QSpinBox" name="spinBox_y1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>452</number></property></widget></item><item row="2" column="2"><widget class="QLabel" name="label_5"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>y2</string></property></widget></item><item row="2" column="3"><widget class="QSpinBox" name="spinBox_y2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>452</number></property></widget></item><item row="3" column="0"><widget class="QLabel" name="label_3"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>w</string></property></widget></item><item row="4" column="0"><widget class="QLabel" name="label_4"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>h</string></property></widget></item><item row="3" column="1" colspan="3"><widget class="QSpinBox" name="spinBox_w"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>465</number></property></widget></item><item row="4" column="1" colspan="3"><widget class="QSpinBox" name="spinBox_h"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>1057</number></property></widget></item></layout></widget></item><item><widget class="QFrame" name="frame1"><property name="frameShape"><enum>QFrame::Box</enum></property><layout class="QVBoxLayout" name="verticalLayout_2"><item><widget class="QLineEdit" name="lineEdit"><property name="text"><string>D:\Users\Administrator\Documents\Tencent Files\xxx保密需要xxx\FileRecv\MobileFile</string></property></widget></item><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QLabel" name="label_6"><property name="text"><string>色差</string></property><property name="alignment"><set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set></property></widget></item><item><widget class="QSlider" name="horizontalSlider"><property name="value"><number>20</number></property><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QSpinBox" name="spinBox"><property name="maximum"><number>255</number></property><property name="value"><number>40</number></property></widget></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_3"><item><spacer name="horizontalSpacer_2"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>153</width><height>20</height></size></property></spacer></item><item><widget class="QFrame" name="frame"><property name="minimumSize"><size><width>100</width><height>0</height></size></property></widget></item><item><widget class="QPushButton" name="pushButton_color"><property name="text"><string>颜色</string></property></widget></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_4"><item><spacer name="horizontalSpacer"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>278</width><height>20</height></size></property></spacer></item><item><widget class="QPushButton" name="pushButton_start"><property name="text"><string>开始</string></property></widget></item></layout></item></layout></widget></item></layout></widget></item></layout></widget><tabstops><tabstop>lineEdit</tabstop><tabstop>horizontalSlider</tabstop><tabstop>spinBox</tabstop><tabstop>pushButton_color</tabstop><tabstop>pushButton_start</tabstop></tabstops><resources/><connections/>
</ui>

配置文件

找不同.json

[{"title":"找不同","x1":16,"y1":294,"x2":16,"y2":1055,"w":1096,"h":729},{"title":"小花找不同-横向","x1":53,"y1":441,"x2":53,"y2":1107,"w":1020,"h":636},{"title":"小花找不同-竖向","x1":119,"y1":452,"x2":588,"y2":452,"w":465,"h":1057}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/171897.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码&#xff1a; 2. 数据加密示例代…

基于SSM的航班订票管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

一、基本知识 SDRAM : 即同步动态随机存储器&#xff08;Synchronous Dynamic Random Access Memory&#xff09;, 同步是指其时钟频率与对应控制器&#xff08;CPU/FPGA&#xff09;的系统时钟频率相同&#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准&#xff…

【Javascript】编写⼀个函数,排列任意元素个数的数字数组,按从⼩到⼤顺序输出

目录 sort方法 两个for循环 写法一&#xff1a; 写法二&#xff1a; sort方法 var list[3,6,2,8,1,7];list.sort();console.log(list);使用sort方法有局限&#xff0c;适合元素为个位数 var list[3,6,80,100,78,4];list.sort();console.log(list);如果元素 解决方法&#xf…

PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求

PY32F002A系列微控制器是一款高性能、低功耗的MCU&#xff0c;它采用32位ARM Cortex-M0内核&#xff0c;最高工作频率达到24MHz&#xff0c;提供了强大的计算能力。此外&#xff0c;PY32F002A拥有最大20Kbytes的flash存储器和3Kbytes的SRAM&#xff0c;为简单的数据处理提供了充…

asp.net教务管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 教务管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net教务管理系统 应用技术&a…

①【数据库操作】 MySQL数据库的查询、创建、删除、使用。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 目录 数据库相关概念数据库的查询、创建、删除…

数据结构绪论,基本概念

目录 1.什么是数据结构&#xff1f; 2.三种数据结构&#xff1a; 3.第一章绪论 了解概念 1.几个概念 2.数据存储方式&#xff1a; 3.算法的五个重要特性: 4.算法设计的要求: 1.什么是数据结构&#xff1f; 数据 数据&#xff0c;是对客观事物的符号表示&#xff0c;在计…

将自己本地项目上传到git,IDEA图文操作

文章目录 一、初始化git仓库二、gitee创建仓库三、输入自己仓库的地址四、在添加所修改的文件可能的错误 五、合并需上传文件六、上传参考文档 一、初始化git仓库 在自己的项目中&#xff0c;命令行中输入 git init二、gitee创建仓库 新建仓库 设置仓库参数&#xff0c;设置…

iOS Autolayout 约束设置【顺序】的重要性!

0x00 顺序不同&#xff0c;结果不同 看图说话 1 代码是这样滴~ 设置好约束&#xff0c;让 4 个按钮&#xff0c;宽度均分~ 结果如上图 [_pastButton.topAnchor constraintEqualToAnchor:_textView.bottomAnchor constant:6].active YES;[_pastButton.leftAnchor constraintEq…

Postman如何导出接口的几种方法?

本文主要介绍了Postman如何导出接口的几种方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 前言&#xff1a; 我的文章还是一贯的作风&#xff0c;简确用风格&#xff08;简单确实有用&#xff09;&a…

从REST到GraphQL:升级你的Apollo体验

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

ubuntu安装nps客户端

Ubuntu安装nps客户端 1.什么是nps内网穿透&#xff1f;2.设备情况3.下载客户端3.链接服务端3.1、无配置文件模式3.2、注册到系统服务(启动启动、监控进程) 1.什么是nps内网穿透&#xff1f; nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发…

注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习、深度学习模型可解释性与可视化方法等详解

采用“理论讲解案例实战动手实操讨论互动”相结合的方式&#xff0c;抽丝剥茧、深入浅出讲解注意力机制、Transformer模型&#xff08;BERT、GPT-1/2/3/3.5/4、DETR、ViT、Swin Transformer等&#xff09;、生成式模型&#xff08;变分自编码器VAE、生成式对抗网络GAN、扩散模型…

华为机试题:HJ3 明明的随机数

目录 第一章、算法题1.1&#xff09;题目描述1.2&#xff09;解题思路与答案1.3&#xff09;牛客链接 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、算法题 1.1&#xff09;题目描述 题目描述&…

MySQL篇---第一篇

系列文章目录 文章目录 系列文章目录一、数据库的三范式是什么二、MySQL数据库引擎有哪些三、说说InnoDB与MyISAM的区别一、数据库的三范式是什么 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与 其他表的非主属性 外键约束 且三…

单片机中的 _nop_() 延时以及其相关的基础扩展

使用 _nop_() 函数做延时遇到的一些问题 以及对此延伸出的一些需要了解的基本概念 ...... by 矜辰所致 完善文章内容结构&#xff0c;补充指令周期、机器周期等一些基本概念 2023/10/25前言 最近还是继续做着项目&#xff0c;因为在某 8051 内核芯片上使用到了 I…

聚焦AIGC落地,八仙过海,谁更神通?

【科技明说 &#xff5c; 重磅专题开篇】 从AI高谈阔论的概念&#xff0c; 到AI真金白银的投资&#xff0c;再到AI因ChatGPT大模型的升温&#xff0c;每一次技术带动产业的革新&#xff0c;都离不开不了两样东西的驱动。一是此起彼伏的技术迭代&#xff0c;二是不计后果的资本…

vue源码分析(四)——vue 挂载($mount)的详细过程

文章目录 前言一、使用RuntimeCompiler解析$mount的原因二、$mount 解析的详细过程1.解析挂载的#app执行了vm.$mount2. 通过$mount方法执行以下文件的mount方法3. 执行util工具文件夹中的query方法4. 执行query方法后返回$mount方法判断el是否是body5. 判断!options.render&…

树莓派 Qt中 QCameraInfo 无法使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、QCameraInfo 是什么&#xff1f;二、使用步骤1.测试代码2.解决方案2.1输入命令2.2输出 3. 成功打印了摄像头的信息 总结 前言 提示&#xff1a;这里可以添…