kekxv 技术博客
http://kekxv.github.io/icon.png
kekxv
2023-04-19T02:28:50.949Z
http://kekxv.github.io/
kekxv
Hexo
OCR & 人脸算法 -- opencv dnn
http://kekxv.github.io/2022/07/30/OCR-%E4%BA%BA%E8%84%B8%E7%AE%97%E6%B3%95-opencv-dnn/
2022-07-30T10:14:04.000Z
2023-04-19T02:28:50.949Z
<p>OCR 算法以及人脸算法相信大家都听说过,也知道是需要收费的,而opencv的人脸检测和人脸识别,以及OCR算法都比较弱。</p>
<p>但是,这在opencv4版本之后都将改变了,在opencv4的版本里面,神经网络版本的人脸算法以及OCR算法继承到了dnn模块内,以及可以作为一个成熟方案进行使用了,</p>
<p>接下来让我们来看看如何使用它们。</p>
tensorflow gpu 安装(ubuntu22.04)
http://kekxv.github.io/2022/07/26/tensorflow-gpu-%E5%AE%89%E8%A3%85-ubuntu22-04/
2022-07-26T05:56:21.000Z
2023-04-19T02:28:50.953Z
<p><code>ubuntu22.04</code> 安装 <code>tensorflow-gpu</code> 记录,主要是 <code>NVIDIA</code> 驱动麻烦,这里做个记录。</p>
深度学习记录-简单
http://kekxv.github.io/2022/07/07/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95-%E7%AE%80%E5%8D%95/
2022-07-07T12:00:14.000Z
2023-04-19T02:28:50.954Z
<p>记录深度学习AI过程中的一些问题。涉及到 <code>tensorflow</code>、<code>ncnn</code>、<code>onnx</code>、<code>keras</code>的训练以及转换模型</p>
vbs 启动进程并记录 PID
http://kekxv.github.io/2022/04/16/vbs-%E5%90%AF%E5%8A%A8%E8%BF%9B%E7%A8%8B%E5%B9%B6%E8%AE%B0%E5%BD%95-PID/
2022-04-16T03:05:59.000Z
2023-04-19T02:28:50.953Z
<p>在<code>Windows</code>下,有时候需要管理一些程序,在 <code>unix</code> 系列下的时候都是使用 <code>shell</code> 脚本,但在 <code>Windows</code> 下却没有 <code>shell</code> 的默认支持,所以我编写了简单的 <code>startup.vbs</code> 以及 <code>shutdown.vbs</code> 脚本,给予有需要的人以及未来的我进行<del>照抄</del>借鉴。</p>
systemd 简单编写
http://kekxv.github.io/2022/04/16/systemd%20%E7%AE%80%E5%8D%95%E7%BC%96%E5%86%99/
2022-04-15T16:23:48.000Z
2023-04-19T02:28:50.953Z
<p>我们使用 <code>unix</code> 服务器目前管理服务的方式,基本上是使用<code>systemd</code>来进行管理,所以这边简单的说明一下如何编写一个简单的<code>systemd</code>服务脚本。</p>
NSIS 简单配置
http://kekxv.github.io/2022/04/15/NSIS%20%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE/
2022-04-15T02:23:48.000Z
2023-04-19T02:28:50.949Z
<p><code>NSIS(Nullsoft Scriptable Install System)</code>是一个开源的 <code>Windows</code> 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,<code>NSIS</code> 是通过它的脚本语言来描述安装程序的行为和逻辑的。<code>NSIS</code> 的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。</p>
kInteractiveProtocol 协议
http://kekxv.github.io/2022/04/08/kInteractiveProtocol%20%E5%8D%8F%E8%AE%AE/
2022-04-08T04:00:00.000Z
2023-04-19T02:28:50.952Z
<p>kInteractiveProtocol 协议 为双向协议,主要用于双方主动发送数据识别在接收时期寻回发送来源,即消息ID。</p>
idea开源授权申请
http://kekxv.github.io/2022/03/16/idea%E5%BC%80%E6%BA%90%E6%8E%88%E6%9D%83%E7%94%B3%E8%AF%B7/
2022-03-16T01:03:29.000Z
2023-04-19T02:28:50.952Z
<p><code>JetBrains</code> 公司旗下的 <code>IDEA</code> 功能都十分强大,深受各种编程语言相关的程序员的喜爱。</p>
<p>正常情况下 <code>JetBrains</code> 公司的每个 <code>IDE</code> 分为<code>Ultimate(企业付费版本)</code>和<code>Community(社区免费)</code>两个版本。大多数情况下,社区免费版本已经够用,只是在某些情况下例如<code>c/c++</code>开发则无社区版本,同时社区版本对一些插件无法支持。</p>
<p>这时候我们将希望能够使用<code>Ultimate</code>版本,能够更快捷的进行开发。</p>
<p>我们可以选择购买 <code>Ultimate</code> 授权,如果购买的是一年的订阅,则将会获得一年的更新支持,同时能够得到当前版本的永久回退授权,只是过期之后不能享受新版本的升级。</p>
<p>另外, <code>JetBrains</code> 公司为了表达对开源项目的支持。只要你拥有一个符合条件的开源项目,你或者你的团队就可以免费使用 <code>JetBrains</code> 公司旗下所有的 <code>Ultimate</code> 版本的 <code>IDE</code> 开发工具,即全家桶的使用权 <code>1 年</code>,如果到期了可以继续申请。</p>
http proxy 数据
http://kekxv.github.io/2022/02/24/http%20proxy%20%E6%95%B0%E6%8D%AE/
2022-02-24T02:28:48.000Z
2023-04-19T02:28:50.952Z
<p>以<code>http</code>代理简单表示 <code>http proxy</code> 发送和接收的协议</p>
网络通信工具 netcat
http://kekxv.github.io/2022/02/24/%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E5%B7%A5%E5%85%B7%20netcat/
2022-02-24T02:23:48.000Z
2023-04-19T02:28:50.954Z
<p><code>netcat</code>,简写为 <code>nc</code>,是 <code>unix</code> 系统下一个强大的命令行网络通信工具,用于在两台主机之间建立 <code>TCP</code> 或者 <code>UDP</code> 连接,并提供丰富的命令进行数据通信。<code>nc</code> 在网络参考模型属于应用层。使用 <code>nc</code><br>可以做很多事情:<code>建立连接</code>,<code>发送数据包</code>,<code>监听端口</code>,<code>扫描端口</code>,处理 <code>ip4</code> 和 <code>ip6</code>,和 <code>telnet</code> 不同,<code>nc</code> 会区分错误输出和标准输出,<code>telnet</code> 则都是标准输出。</p>
Windows自带的端口转发
http://kekxv.github.io/2021/08/07/Port%20forwarding%20that%20comes%20with%20Windows/
2021-08-07T02:23:48.000Z
2023-04-19T02:28:50.950Z
<p>通过 <code>Windows</code> 实现端口转发。本文为参考转发文章</p>
<p>使用<code>Portproxy</code>模式下的<code>Netsh</code>命令即能实现<code>Windows</code>系统中的端口转发,转发命令如下:</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netsh interface portproxy add v4tov4 listenaddress=[localaddress] listenport=[localport] connectaddress=[destaddress]</span><br></pre></td></tr></table></figure>
bazel 笔记 01
http://kekxv.github.io/2021/08/07/bazel%20notes%2001/
2021-08-07T02:23:48.000Z
2023-04-19T02:28:50.950Z
<p>Bazel - a fast, scalable, multi-language and extensible build system</p>
<p>在使用 <code>bazel</code> 许久之后,开始做一下记录,以记录一些奇奇怪怪的处理方式(?)。</p>
docker swarm替代docker-compose
http://kekxv.github.io/2021/08/07/docker%20swarm%E6%9B%BF%E4%BB%A3docker-compose/
2021-08-07T02:23:48.000Z
2023-04-19T02:28:50.951Z
<p>使用 docker-compose 管理本地容器组,是非常方便的手段,但是最近遇到一个 bug,决定使用 docker stack /swarm 替代 docker-compose 。</p>
<blockquote>
<p>命令行生成二维码可以试试 <code>echo "二维码内容" | qrencode -o - -t UTF8</code></p>
</blockquote>
<p>事情是这样的,在 <code>docker-compose.yaml</code> 内定义了 <code>network</code>.<code>aliases</code> 之后,在测试的时候,其他容器能够正常通过 <code>aliases</code> 对其进行访问,但是,到了实际部署的时候,很容易失败,例如重启之后,或者某个容器意外或者手动重启之后,都有可能导致该情况,导致很湿郁闷。</p>
<p>遂,在查找资料之后,决定替换掉 <code>docker-compose</code>。</p>
<blockquote>
<p>Ps:<code>docker-compose</code> 的配置 <code>depends_on</code> 只会控制控制启动顺序,并不会等待所需容器启动成功之后再启动下一 容器<br>简单来说,启动容器<code>数据库</code>之后会马上启动容器<code>应用</code>,并不在乎<code>应用</code>容器需要<code>数据库</code>容器才能正常运行,此时可能会造成 <code>应用</code> 容器无法找到数据库而意外退出。</p>
</blockquote>
kProxyCpp 服务端软件
http://kekxv.github.io/2021/08/07/kProxyCpp%20%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%BD%AF%E4%BB%B6/
2021-08-07T02:23:48.000Z
2023-04-19T02:28:50.952Z
<p>承接自 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2tla3h2L2tIdHRwZA==">kHttpd<i class="fa fa-external-link-alt"></i></span> 项目。</p>
<p>由于 <code>kHttpd</code> 项目使用了 <code>libevent</code> 开源库,其中某些特性导致使用上面不太方面(仅仅指的是我个人而言),所以重新开发了本项目。</p>
<h1 id="功能说明"><a href="#功能说明" class="headerlink" title="功能说明"></a>功能说明</h1><ol>
<li><p><code>http server</code> 实现, <code>http server</code> 服务端功能,使用线程池为每个连接进行处理,所以每个请求都可以阻塞(但是并不建议,除非某种特定的场景,例如进行http代理服务,必须等到对方回应,不使用 <code>libevent</code> 其中一个原因)。</p>
</li>
<li><p><code>WebSocket server</code> 实现,当前项目实现了<code>WebSocket server</code>端代码,可以使用 c/c++ 愉快的开发<code>WebSocket</code>项目,同时<code>WebSocket</code>服务端也支持<code>http server</code>,也就是同一个端口同时使用<code>WebSocket server</code> 以及 <code>http server</code>,使得更方便一些。使用<code>WebSocket server</code>的情况下,请根据实际情况,加大线程数量以及监听数量,否则可能造成后续连接被阻塞。</p>
</li>
<li><p><code>CGI</code> 功能实现,目前实现 <code>CGI</code> 调用 <code>php</code>,可以使用<code>php</code>作为动态脚本进行开发,不过现在还未实现 <code>php</code>的<code>POST</code>模式,即还未将 <code>php</code> <code>body</code>数据传入给<code>CGI</code>。</p>
</li>
</ol>
ssh 隧道端口转发
http://kekxv.github.io/2021/08/07/ssh%20%E9%9A%A7%E9%81%93%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/
2021-08-07T02:23:48.000Z
2023-04-19T02:28:50.953Z
<p>在部分情况下,没有办法直接访问到目标机器,需要通过中转的方式进行访问,一般使用代理,或者VPN等组网方式,使用端口转发的方式其实也是不错的。</p>
<p>这里简单介绍一下 <code>ssh</code> 的代理方式.</p>
bazel 工具链
http://kekxv.github.io/2021/08/06/bazel%20toolchain%2001/
2021-08-06T02:23:48.000Z
2023-04-19T02:28:50.950Z
<p>最近在使用 <code>bazel</code> ,尝试使用交叉编译,在这做个记录</p>
<p>配置的地方有几个:</p>
<ol>
<li><code>.bazelrc</code> 文件配置,用于激活 <code>config</code> 配置</li>
<li>创建 <code>toolchain</code> 目录,并创建<code>BUILD</code>文件</li>
<li>创建对应的 <code>.bzl</code> 文件</li>
</ol>
安卓模拟自动注入
http://kekxv.github.io/2021/08/05/Android%20simulation%20automatic%20injection/
2021-08-05T02:23:48.000Z
2023-04-19T02:28:50.948Z
<p>本项目是用于模拟自动注入,通过添加注解<code>@Autowired</code>,方便在安卓下能够更好的自动注入自动添加对象,不需要自己给每一个类进行<code>Instance</code>维护。</p>
gradle发布到github packages
http://kekxv.github.io/2021/08/03/gradle%E5%8F%91%E5%B8%83%E5%88%B0github%20packages/
2021-08-03T02:23:48.000Z
2023-04-19T02:28:50.952Z
<p>最近弄了个<code>Android</code>的模拟自动注入的库,在给别人用的时候,需要发送 <code>jar</code> 或者 <code>aar</code> 给对方,这就导致我可能需要保留一份,否则每次都需要重新编译生成。为了 <del>偷懒</del><br>增加效率,在查询资料之后,将其发布到了<code>github packages</code>。</p>
<p>准备工作:需要<code>github</code>账号(废话),生成<code>GitHub token</code>需要有写权限(如果只是使用不需要,如果需要推送则需要),将账号(<code>GITHUB_USER</code>)<br>和<code>token</code>(<code>GITHUB_PERSONAL_ACCESS_TOKEN</code>)配置到用户目录下<code>~/.gradle/gradle.properties</code>。</p>
<blockquote>
<p>注意事项:</p>
<p>如果发布返回4**系列错误,原因可能是这几个:</p>
<ol>
<li><code>GroupPageId</code>或者<code>ArtificatId</code>使用了大写,需要改为小写。</li>
<li>当前<code>GroupPageId</code>或者<code>ArtificatId</code>已经在使用了!!!,需要修改,或者把在使用的删掉。。。。</li>
<li>账号密码(<code>Token</code>)错误。</li>
</ol>
</blockquote>
OpenCV ORB 模板匹配
http://kekxv.github.io/2021/08/02/OpenCV%20ORB%20%E6%A8%A1%E6%9D%BF%E5%8C%B9%E9%85%8D/
2021-08-02T02:23:48.000Z
2023-04-19T02:28:50.949Z
<p>在某些情况下,我们需要用一个已知的物体,在一个场景内进行匹配,比如有一张身份证,然后想要在桌子上找到他的位置。比如以下两张图片:</p>
<blockquote>
<p>身份证图片:</p>
<img src="/images/20210807/12/201912181125218966050.jpg" alt="韦小宝" width="300" />
<p>桌子图片:</p>
<img src="/images/20210807/12/201912181127039744167.jpg" alt="韦小宝桌子" width="400" />
<p>(什么?没有桌子?哦,不要在意这些细节问题,嗯。)</p>
</blockquote>
<p>如果想要从其中桌子图片找到身份证图片的话,我们可以使用 OpenCV 的 ORB特征检测器(SIFT和SURF已获得专利,如果要在实际应用中使用它,则需要支付许可费,而 ORB 速度和性能也不差)。</p>
小尺寸电脑对比
http://kekxv.github.io/2021/08/01/Small%20size%20computer%20comparison/
2021-08-01T02:23:48.000Z
2023-04-19T02:28:50.950Z
<p>在需要带着笔记本出门的情况下,相对于如今动不动就 <code>15寸+</code> 的笔记本电脑,我更喜欢携带一些小尺寸的电脑,毕竟,每天上下班背电脑是真的重。</p>