Skip to content

2023

Mac使用Stable Diffusion进行AI画图(CPU)

引言

https://github.com/CompVis/stable-diffusion

Stable Diffusion is a latent text-to-image diffusion model.

Stable Diffusion是近年来流行的AI生成图片工具,这里尝试在Mac电脑(非M1)上使用CPU进行图片生成。

整个安装过程异常崎岖,参考了很多博客文章但大部分都进行不下去,要么是系统本身缺某个软件包或版本不对,要么是Python相关的软件包安装不了。

CStdString:一个跨平台的字符串类实现

引言

A Drop-In replacement for CString that builds on the Standard C++ Library's basic_string template

在C++标准库中有一个std::string字符串类实现,但它的功能简陋一些;而在VC++ MFC中有一个CString类,提供了丰富的字符串操作接口。

CStdString是一个类似CString操作接口的、跨平台的字符串类实现,作者是Joe O'Leary,使用它只需要包含整个头文件StdString.h

使用shred工具彻底粉碎文件

引言

shred - overwrite a file to hide its contents, and optionally delete it

Overwrite the specified FILE(s) repeatedly, in order to make it harder for even very expensive hardware probing to recover the data.

很多时候删除一个文件,实际上只是在文件系统里面将该文件所在存储位置标记为可用、可覆盖状态,这个时候是可以通过恢复工具来进行恢复的;但如果这块存储位置之后反复被其他内容填充、覆盖的话,恢复的难度就增加了。

shred工具在coreutils软件包中,一般Linux系统都自带有这个工具。它通过多次覆盖的方式来删除文件,避免文件被恢复工具重新恢复,达到彻底粉碎的效果。但实际使用中,还是有一些需要注意的地方,并不能保证任何情况下都可以覆盖、删除干净,还是可能被恢复回来。

火把龙

疫情后第一个春节,西安各大景点的游客人山人海,爱热闹却又怕人多的我就一直在家歇着;元宵夜,当窗外此起彼伏的烟花爆竹声传来时,还是禁不住的又一次想起来了家乡的火把龙。

小时候,只是跟着大人在元宵前一天走路去一个地方看舞龙表演,那是一个在山里的小村子,都是村里的青壮年来进行表演。表演的地方不大,是在一个小河边草地上,据说很久以前这里是有一个龙王庙的。男人们在山下河边放鞭炮,妇女们则带着孩子在远远的山坡上望着,之所以要躲在远远的,绝不仅仅是怕爆竹声,而是怕一种叫“神铳”的东西。所谓的神铳,是手举一根长长的棍子,棍子顶部是一个铁块做成的腔体,腔体填满火药,再用木片夯实,一旦点燃引爆会发出震耳欲聋的声音。

小时候对这种神铳是十分好奇的,因为家人们交代,捡到神铳爆破后散落的木片就会带来好运气;这个木皮有一个专属名字叫“神铳尖”,捡到它不仅会带来好运,把它放到鸡窝里还可以多下鸡蛋。每次我都期望可以捡到一两片神铳尖,但一次都没捡到过。

TensorFlow读取.pb模型文件并预测图片

引言

TensorFlow通过Python接口训练好模型,然后使用C++ API加载.pb模型文件,再对图片进行预测判断,这需要解决几个问题:

  • 如何将训练好的模型保存为.pb格式文件?
  • 如何在C++ API中加载训练好的模型文件?
  • 如何在C++ API中读取图片并变成需要的格式?
  • 如果在C++ API中根据模型对图片进行预测判断?

源码编译TensorFlow为C++ API动态库

引言

根据文档 https://tensorflow.google.cn/install 进行TensorFlow的安装时,要特别注意环境依赖的版本号,如果某个依赖项版本号不一致就会出现问题,比如使用的Python版本、Bazel版本、ProtocolBuffers版本等。

如果是通过Pip安装Python库的形式会容易一些,但如果想从源码编译,尤其是想编译出C/C++ API动态库形式就会比较麻烦,即使编译成功还要避免和其它库出现ABI冲突,参考: https://github.com/rangsimanketkaew/tensorflow-cpp-api 可以节省很多时间。

Protocol Buffers: 谷歌开源的数据交换格式协议

引言

仓库:https://github.com/protocolbuffers/protobuf

文档:https://protobuf.dev/

protobuf(Protocal Buffers)是广泛使用的序列化、数据交换开源库,在RPC框架brpc、grpc和TensorFlow中都有使用到。

  • 直接安装软件包:
$ apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler

$ protoc --version
libprotoc 3.6.1