[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-patrikhuber--eos":3,"tool-patrikhuber--eos":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",149489,2,"2026-04-10T11:32:46",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":79,"owner_twitter":80,"owner_website":81,"owner_url":82,"languages":83,"stars":99,"forks":100,"last_commit_at":101,"license":102,"difficulty_score":103,"env_os":104,"env_gpu":105,"env_ram":106,"env_deps":107,"category_tags":115,"github_topics":117,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":131,"updated_at":132,"faqs":133,"releases":162},6197,"patrikhuber\u002Feos","eos","A lightweight 3D Morphable Face Model library in modern C++","eos 是一个轻量级的 3D 可变形人脸模型（3DMM）拟合库，采用现代 C++11\u002F14 编写，专为高效处理人脸三维重建任务而设计。它解决了从二维图像中快速恢复人脸三维形状、姿态及表情参数的技术难题，支持线性姿态估计、形状与关键点拟合、边缘轮廓拟合以及纹理提取等核心功能。\n\neos 原生兼容多种主流人脸模型（如 Basel Face Model、Surrey Face Model 等），并内置了六种基础表情混合形状，能够灵活应对不同研究需求。其独特的技术亮点在于完全无外部依赖的“仅头文件”架构，极大简化了集成流程；同时提供完善的 Python 绑定，方便用户通过 `pip` 直接安装调用，兼顾了 C++ 的高性能与 Python 的易用性。此外，项目还实验性地支持基于 Ceres 的非线性优化，为高阶算法探索提供了可能。\n\n这款工具非常适合计算机视觉领域的研究人员、图形学开发者以及需要人脸建模功能的工程师使用。无论是学术研究中的人脸分析算法验证，还是工程实践中的人脸重建应用开发，eos 都能提供稳定且高效的基础支持。对于希望深入理解 3D 人脸模型原理并动手实践的技术爱好者，eos ","eos 是一个轻量级的 3D 可变形人脸模型（3DMM）拟合库，采用现代 C++11\u002F14 编写，专为高效处理人脸三维重建任务而设计。它解决了从二维图像中快速恢复人脸三维形状、姿态及表情参数的技术难题，支持线性姿态估计、形状与关键点拟合、边缘轮廓拟合以及纹理提取等核心功能。\n\neos 原生兼容多种主流人脸模型（如 Basel Face Model、Surrey Face Model 等），并内置了六种基础表情混合形状，能够灵活应对不同研究需求。其独特的技术亮点在于完全无外部依赖的“仅头文件”架构，极大简化了集成流程；同时提供完善的 Python 绑定，方便用户通过 `pip` 直接安装调用，兼顾了 C++ 的高性能与 Python 的易用性。此外，项目还实验性地支持基于 Ceres 的非线性优化，为高阶算法探索提供了可能。\n\n这款工具非常适合计算机视觉领域的研究人员、图形学开发者以及需要人脸建模功能的工程师使用。无论是学术研究中的人脸分析算法验证，还是工程实践中的人脸重建应用开发，eos 都能提供稳定且高效的基础支持。对于希望深入理解 3D 人脸模型原理并动手实践的技术爱好者，eos 同样是一个理想的学习资源。","# eos: A lightweight header-only 3D Morphable Face Model fitting library in modern C++11\u002F14.\n[![Latest release](http:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fpatrikhuber\u002Feos.svg?style=flat-square)][release]\n[![Build status of master branch](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Factions\u002Fworkflows\u002Fcmake.yml\u002Fbadge.svg)][github-actions-build]\n[![Apache License 2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%20License%202.0-blue.svg?style=flat-square)][license]\n[![Sponsor eos on GitHub Sponsors](https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?style=flat-square&label=Sponsor&message=%E2%9D%A4&logo=GitHub)][sponsor]\n\n[release]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\n[github-actions-build]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Factions\n[license]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002FLICENSE\n[sponsor]: https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fpatrikhuber\n\neos is a lightweight 3D Morphable Face Model fitting library that provides basic functionality to use face models, as well as camera and shape fitting functionality. It's written in modern C++11\u002F14.\n\nAt the moment, it mainly provides the following functionality:\n\n* MorphableModel and PcaModel classes to represent 3DMMs, with basic operations like `draw_sample()`. Supports the Surrey Face Model (SFM), 4D Face Model (4DFM), Basel Face Model (BFM) 2009 and 2017, and the Liverpool-York Head Model (LYHM) out-of-the-box\n* The low-resolution, shape-only Surrey Face Model ([share\u002Fsfm_shape_3448.bin](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fshare\u002Fsfm_shape_3448.bin))\n* Fast, linear pose, shape and expression fitting, edge and contour fitting:\n  * Linear scaled orthographic projection camera pose estimation\n  * Linear shape-to-landmarks fitting, implementation of O. Aldrian & W. Smith, _Inverse Rendering of Faces with a 3D Morphable Model_, PAMI 2013\n  * Expression fitting, with 6 linear expression blendshapes of the SFM: anger, disgust, fear, happiness, sadness, surprise\n  * Edge-fitting, heavily inspired by: A. Bas et al., _Fitting a 3D Morphable Model to Edges: A Comparison Between Hard and Soft Correspondences_, ACCVW 2016\n* Texture extraction to obtain a pose-invariant representation of the face texture\n* **Python bindings**: Much of eos's functionality is available as a python module (try `pip install eos-py`!)\n* (_Experimental_): Non-linear fitting cost functions using Ceres for shape, camera, blendshapes and the colour model (needs Ceres to be installed separately)\n\nAn experimental model viewer to visualise 3D Morphable Models and blendshapes is available [here](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos-model-viewer).\n\n## Usage\n\n* Tested with the following compilers: >=gcc-6, >=clang-5, >=Visual Studio 2017 15.5, >=Xcode 9.2.\n* The library and python bindings **do not require any external dependencies**. The example applications require Boost (>=1.71.0) and OpenCV (>=2.4.3).\n\nTo use the library in your own project, just add the following directories to your include path:\n\n* `eos\u002Finclude`\n* `eos\u002F3rdparty\u002Fcereal\u002Finclude`\n* `eos\u002F3rdparty\u002Fnanoflann\u002Finclude`\n* `eos\u002F3rdparty\u002Feigen\u002FEigen`\n* `eos\u002F3rdparty\u002Feigen3-nnls\u002Fsrc`\n* `eos\u002F3rdparty\u002Ftoml11`\n\n**Make sure to clone with `--recursive` to download the required submodules!**\n\n### Build the examples and tests\n\n* Needed dependencies for the example app: CMake (>=3.8.2, or >=3.10.0 for MSVC), Boost system, filesystem, program_options (>=1.71.0), OpenCV core, imgproc, highgui (>=2.4.3).\n\nTo build:\n\n```\ngit clone --recursive https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos.git\nmkdir build && cd build # creates a build directory next to the 'eos' folder\ncmake -G \"\u003Cyour favourite generator>\" ..\u002Feos -DCMAKE_INSTALL_PREFIX=..\u002Finstall\u002F\nmake && make install # or open the project file and build in an IDE like Visual Studio\n```\nIt is strongly recommended to use [vcpkg](https:\u002F\u002Fgithub.com\u002FMicrosoft\u002Fvcpkg\u002F) to install the dependencies on Windows.\nUsers who wish to manage dependencies manually may find it helpful to copy `initial_cache.cmake.template` to `initial_cache.cmake`, edit the necessary paths and run `cmake` with `-C ..\u002Feos\u002Finitial_cache.cmake`. On Linux, you may also want to set `-DCMAKE_BUILD_TYPE=...` appropriately.\n\n\n## Sample code\n\nThe fit-model example app creates a 3D face from a 2D image.\n\nAfter `make install` or running the `INSTALL` target, an example image with landmarks can be found in `install\u002Fbin\u002Fdata\u002F`. The model and the necessary landmarks mapping file are installed to `install\u002Fshare\u002F`.\n\nYou can run the example just by running:\n\n`fit-model`\n\nIt will load the face model, landmark-to-vertex mappings, blendshapes, and other required files from the `..\u002Fshare\u002F` directory, and run on the example image. It can be run on other images by giving it a `-i` parameter for the image and `-l` for a set of ibug landmarks. The full set of parameters can be viewed by running `fit-model --help`.\n\nIf you are just getting started, it is recommended to have a look at `fit-model-simple` too, as it requires much fewer input, and only fits pose and shape, without any blendshapes or edge-fitting. Its full set of arguments is:\n\n`fit-model-simple -m ..\u002Fshare\u002Fsfm_shape_3448.bin -p ..\u002Fshare\u002Fibug_to_sfm.txt -i data\u002Fimage_0010.png -l data\u002Fimage_0010.pts`\n\nThe output in both cases is an `obj` file with the shape and a `png` with the extracted texture map. The estimated pose angles and shape coefficients are available in the code via the API.\n\nSee [examples\u002Ffit-model.cpp](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fexamples\u002Ffit-model.cpp) for the full code.\n\n## The Surrey Face Model\n\nThe library includes a low-resolution shape-only version of the Surrey Morphable Face Model. It is a PCA model of shape variation built from 3D face scans. It comes with uv-coordinates to perform texture remapping.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_f6683a5ce9fd.png\" width=20% alt=\"Surrey Face Model shape picture\">\u003C\u002Fimg>\n\nThe full model is available at [http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel](http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel).\n\n## 4D Face Model (4DFM)\n\neos can be used to load, use and do basic fitting with the 4D Face Model (4DFM) from [4dface Ltd](https:\u002F\u002Fwww.4dface.io). The model features 39 expressions\u002Faction units, and diverse identity variation.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_f45d7b9d74e4.jpg\" width=20% alt=\"4D Face Model colour picture\">\u003C\u002Fimg>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_20f5494b0d8b.png\" width=20% alt=\"4D Face Model shape picture\">\u003C\u002Fimg>\n\nMore information about the model can be found on [www.4dface.io\u002F4dfm](https:\u002F\u002Fwww.4dface.io\u002F4dfm\u002F).\n\n## Python bindings\n\neos includes python bindings for some of its functionality (and more can be added!). It can be installed from [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F) with `pip install eos-py`. You will still need the data files from this repository.\nMake sure that you've got >=gcc-7 or >=clang-5 as the default compiler on Linux (for example from the [ubuntu-toolchain-r\u002Ftest](https:\u002F\u002Flaunchpad.net\u002F~ubuntu-toolchain-r\u002F+archive\u002Fubuntu\u002Ftest) repository) or do ``CC=`which gcc-7` CXX=`which g++-7` pip install eos-py``. Also make sure you've got >=cmake-3.8.2 (or >=cmake-3.10.0 for MSVC) in your path.\nIn case of issues, the bindings can also be built manually: Clone the repository and set `-DEOS_GENERATE_PYTHON_BINDINGS=on` when running `cmake` (and optionally set `PYTHON_EXECUTABLE` to point to your python interpreter if it's not found automatically).\n\nAfter having obtained the bindings, they can be used like any python module:\n\n```\nimport eos\nimport numpy as np\n\nmodel = eos.morphablemodel.load_model(\"eos\u002Fshare\u002Fsfm_shape_3448.bin\")\nsample = model.get_shape_model().draw_sample([1.0, -0.5, 0.7])\n\nhelp(eos) # check the documentation\n```\n\nSee [`demo.py`](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fpython\u002Fdemo.py) for an example on how to run the fitting.\n\n## Matlab bindings\n\n_Experimental (not maintained currently)_: eos includes Matlab bindings for the `fit_shape_and_pose(...)` function, which means the fitting can be run from Matlab. Set `-DEOS_GENERATE_MATLAB_BINDINGS=on` when running `cmake` to build the required mex-file and run the `INSTALL` target to install everything. (Set `Matlab_ROOT_DIR` to point to your Matlab directory if it's not found automatically). More bindings (e.g. the MorphableModel itself) might be added in the future.\n\nGo to the `install\u002Feos\u002Fmatlab` directory and run [`demo.m`](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fmatlab\u002Fdemo.m) to see how to run the fitting. The result is a mesh and rendering parameters (pose).\n\n## Documentation\n\nDoxygen: http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F\n\nThe [fit-model example](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fexamples\u002Ffit-model.cpp) and the [Namespace List](http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002Fnamespaces.html) in doxygen are a good place to start.\n\n\n## License & contributions\n\nThis code is licensed under the Apache License, Version 2.0. The 3D morphable face model under [share\u002Fsfm_shape_3448.bin](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fshare\u002Fsfm_shape_3448.bin) is free for use for non-commercial purposes. For commercial purposes and to obtain other model resolutions, see [http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel](http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel).\n\nContributions are very welcome! (best in the form of pull requests.) Please use GitHub issues for any bug reports, ideas, and discussions.\n\nIf you use this code in your own work, please cite the following paper: _A Multiresolution 3D Morphable Face Model and Fitting Framework_, P. Huber, G. Hu, R. Tena, P. Mortazavian, W. Koppen, W. Christmas, M. Rätsch, J. Kittler, International Conference on Computer Vision Theory and Applications (VISAPP) 2016, Rome, Italy [[PDF]](http:\u002F\u002Fwww.patrikhuber.ch\u002Ffiles\u002F3DMM_Framework_VISAPP_2016.pdf).\n","# eos：一个基于现代 C++11\u002F14 的轻量级、仅包含头文件的 3D 可变形人脸模型拟合库。\n[![最新版本](http:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fpatrikhuber\u002Feos.svg?style=flat-square)][release]\n[![主分支构建状态](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Factions\u002Fworkflows\u002Fcmake.yml\u002Fbadge.svg)][github-actions-build]\n[![Apache License 2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%20License%202.0-blue.svg?style=flat-square)][license]\n[![在 GitHub Sponsors 上赞助 eos](https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?style=flat-square&label=Sponsor&message=%E2%9D%A4&logo=GitHub)][sponsor]\n\n[release]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\n[github-actions-build]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Factions\n[license]: https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002FLICENSE\n[sponsor]: https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fpatrikhuber\n\neos 是一个轻量级的 3D 可变形人脸模型拟合库，提供了使用人脸模型的基本功能，以及相机和形状的拟合功能。它采用现代 C++11\u002F14 编写。\n\n目前，eos 主要提供以下功能：\n\n* MorphableModel 和 PcaModel 类用于表示 3DMMs，并支持基本操作如 `draw_sample()`。开箱即用地支持萨里人脸模型 (SFM)、4D 人脸模型 (4DFM)、巴塞尔人脸模型 (BFM) 2009 和 2017 版，以及利物浦-约克头部模型 (LYHM)。\n* 低分辨率、仅包含形状信息的萨里人脸模型（[share\u002Fsfm_shape_3448.bin](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fshare\u002Fsfm_shape_3448.bin)）。\n* 快速的线性姿态、形状和表情拟合，以及边缘和轮廓拟合：\n  * 线性缩放正交投影相机姿态估计。\n  * 线性形状到关键点的拟合，实现 O. Aldrian & W. Smith 在 PAMI 2013 中提出的“使用 3D 可变形模型进行人脸逆向渲染”方法。\n  * 表情拟合，使用 SFM 的 6 种线性表情混合形状：愤怒、厌恶、恐惧、快乐、悲伤、惊讶。\n  * 边缘拟合，深受 A. Bas 等人在 ACCVW 2016 中发表的“将 3D 可变形模型拟合到边缘：硬对应与软对应的比较”启发。\n* 纹理提取，以获得与姿态无关的人脸纹理表示。\n* **Python 绑定**：eos 的许多功能都可以通过 Python 模块使用（尝试运行 `pip install eos-py`！）。\n* （实验性）：使用 Ceres 库实现非线性拟合代价函数，用于形状、相机、混合形状和颜色模型（需要单独安装 Ceres）。\n\n一个用于可视化 3D 可变形模型和混合形状的实验性模型查看器可在 [这里](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos-model-viewer) 获取。\n\n## 使用方法\n\n* 已在以下编译器上测试过：>=gcc-6、>=clang-5、>=Visual Studio 2017 15.5、>=Xcode 9.2。\n* 该库及其 Python 绑定 **无需任何外部依赖**。示例应用程序需要 Boost（>=1.71.0）和 OpenCV（>=2.4.3）。\n\n要在您自己的项目中使用该库，只需将以下目录添加到您的包含路径中：\n\n* `eos\u002Finclude`\n* `eos\u002F3rdparty\u002Fcereal\u002Finclude`\n* `eos\u002F3rdparty\u002Fnanoflann\u002Finclude`\n* `eos\u002F3rdparty\u002Feigen\u002FEigen`\n* `eos\u002F3rdparty\u002Feigen3-nnls\u002Fsrc`\n* `eos\u002F3rdparty\u002Ftoml11`\n\n**请务必使用 `--recursive` 选项克隆，以下载所需的子模块！**\n\n### 构建示例和测试\n\n* 示例应用程序所需的依赖项：CMake（>=3.8.2，或 >=3.10.0 用于 MSVC）、Boost system、filesystem、program_options（>=1.71.0）、OpenCV core、imgproc、highgui（>=2.4.3）。\n\n构建步骤如下：\n\n```\ngit clone --recursive https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos.git\nmkdir build && cd build # 在 'eos' 文件夹旁边创建一个构建目录\ncmake -G \"\u003Cyour favourite generator>\" ..\u002Feos -DCMAKE_INSTALL_PREFIX=..\u002Finstall\u002F\nmake && make install # 或者打开项目文件并在 Visual Studio 等 IDE 中构建\n```\n\n强烈建议在 Windows 上使用 [vcpkg](https:\u002F\u002Fgithub.com\u002FMicrosoft\u002Fvcpkg\u002F) 来安装依赖项。\n\n希望手动管理依赖项的用户可以将 `initial_cache.cmake.template` 复制到 `initial_cache.cmake`，编辑必要的路径，然后使用 `-C ..\u002Feos\u002Finitial_cache.cmake` 运行 `cmake`。在 Linux 上，您可能还需要适当地设置 `-DCMAKE_BUILD_TYPE=...`。\n\n## 示例代码\n\nfit-model 示例应用程序会从一张 2D 图像生成一个 3D 人脸。\n\n在执行 `make install` 或运行 `INSTALL` 目标后，可以在 `install\u002Fbin\u002Fdata\u002F` 中找到带有关键点的示例图像。模型和所需的关键点映射文件会被安装到 `install\u002Fshare\u002F`。\n\n只需运行以下命令即可运行示例：\n\n`fit-model`\n\n它会从 `..\u002Fshare\u002F` 目录加载人脸模型、关键点到顶点的映射、混合形状以及其他必要文件，并在示例图像上运行。您也可以通过为图像指定 `-i` 参数，为 ibug 关键点集指定 `-l` 参数来运行其他图像。完整的参数列表可以通过运行 `fit-model --help` 查看。\n\n如果您刚开始使用，也建议查看 `fit-model-simple`，因为它所需的输入少得多，只拟合姿态和形状，不涉及混合形状或边缘拟合。其完整参数列表如下：\n\n`fit-model-simple -m ..\u002Fshare\u002Fsfm_shape_3448.bin -p ..\u002Fshare\u002Fibug_to_sfm.txt -i data\u002Fimage_0010.png -l data\u002Fimage_0010.pts`\n\n两种情况下输出的都是包含形状的 `obj` 文件和包含提取纹理贴图的 `png` 文件。估计的姿态角度和形状系数可通过 API 在代码中获取。\n\n完整代码请参阅 [examples\u002Ffit-model.cpp](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fexamples\u002Ffit-model.cpp)。\n\n## 萨里人脸模型\n\n该库包含萨里可变形人脸模型的低分辨率仅形状版本。它是基于 3D 人脸扫描构建的形状变化 PCA 模型，并附带 UV 坐标以便进行纹理重映射。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_f6683a5ce9fd.png\" width=20% alt=\"萨里人脸模型形状图\">\u003C\u002Fimg>\n\n完整模型可在 [http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel](http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel) 上找到。\n\n## 4D 人脸模型 (4DFM)\n\neos 可用于加载、使用并进行基础拟合的 4D 人脸模型 (4DFM)，该模型由 [4dface Ltd](https:\u002F\u002Fwww.4dface.io) 提供。该模型具有 39 种表情\u002F动作单元，并表现出多样化的人格特征差异。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_f45d7b9d74e4.jpg\" width=20% alt=\"4D 人脸模型彩色图\">\u003C\u002Fimg>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_readme_20f5494b0d8b.png\" width=20% alt=\"4D 人脸模型形状图\">\u003C\u002Fimg>\n\n有关该模型的更多信息，请访问 [www.4dface.io\u002F4dfm](https:\u002F\u002Fwww.4dface.io\u002F4dfm\u002F)。\n\n## Python 绑定\n\neos 为其部分功能提供了 Python 绑定（未来还可继续扩展）。可以通过 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F) 使用 `pip install eos-py` 进行安装。不过，您仍然需要从本仓库获取数据文件。\n\n请确保在 Linux 系统上默认编译器版本为 >=gcc-7 或 >=clang-5（例如来自 [ubuntu-toolchain-r\u002Ftest](https:\u002F\u002Flaunchpad.net\u002F~ubuntu-toolchain-r\u002F+archive\u002Fubuntu\u002Ftest) 仓库），或者执行 ``CC=`which gcc-7` CXX=`which g++-7` pip install eos-py``。此外，请确保您的 PATH 中包含 >=cmake-3.8.2（若使用 MSVC，则需 >=cmake-3.10.0）。\n\n如遇问题，也可手动构建绑定：克隆仓库，在运行 `cmake` 时设置 `-DEOS_GENERATE_PYTHON_BINDINGS=on`（如果未自动找到 Python 解释器，可选择性地设置 `PYTHON_EXECUTABLE` 指向您的 Python 解释器）。\n\n成功获取绑定后，即可像使用任何 Python 模块一样使用它们：\n\n```\nimport eos\nimport numpy as np\n\nmodel = eos.morphablemodel.load_model(\"eos\u002Fshare\u002Fsfm_shape_3448.bin\")\nsample = model.get_shape_model().draw_sample([1.0, -0.5, 0.7])\n\nhelp(eos) # 查看文档\n```\n\n有关如何运行拟合的示例，请参阅 [`demo.py`](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fpython\u002Fdemo.py)。\n\n## Matlab 绑定\n\n_实验性（目前未维护）_: eos 提供了 `fit_shape_and_pose(...)` 函数的 Matlab 绑定，这意味着可以在 Matlab 中运行拟合。在运行 `cmake` 时设置 `-DEOS_GENERATE_MATLAB_BINDINGS=on` 以构建所需的 mex 文件，并运行 `INSTALL` 目标完成安装。（如果未自动找到 Matlab 目录，请设置 `Matlab_ROOT_DIR` 指向您的 Matlab 安装目录）。未来可能会添加更多绑定（例如 MorphableModel 本身）。\n\n进入 `install\u002Feos\u002Fmatlab` 目录并运行 [`demo.m`](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fmatlab\u002Fdemo.m)，即可了解如何运行拟合。结果将生成网格和渲染参数（姿态）。\n\n## 文档\n\nDoxygen：http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F\n\nDoxygen 中的 [fit-model 示例](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fexamples\u002Ffit-model.cpp)以及 [命名空间列表](http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002Fnamespaces.html)是入门的好起点。\n\n\n## 许可与贡献\n\n本代码采用 Apache License, Version 2.0 许可协议。位于 [share\u002Fsfm_shape_3448.bin](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fshare\u002Fsfm_shape_3448.bin) 的 3D 可变形人脸模型可供非商业用途免费使用。如需用于商业目的或获取其他分辨率的模型，请访问 [http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel](http:\u002F\u002Fwww.cvssp.org\u002Ffacemodel)。\n\n我们非常欢迎各类贡献！（最佳方式是通过 Pull Request 提交）。如有任何 bug 报告、建议或讨论，请使用 GitHub Issues。\n\n如果您在自己的工作中使用了本代码，请引用以下论文：_A Multiresolution 3D Morphable Face Model and Fitting Framework_，P. Huber, G. Hu, R. Tena, P. Mortazavian, W. Koppen, W. Christmas, M. Rätsch, J. Kittler，2016 年国际计算机视觉理论与应用会议 (VISAPP)，意大利罗马 [[PDF]](http:\u002F\u002Fwww.patrikhuber.ch\u002Ffiles\u002F3DMM_Framework_VISAPP_2016.pdf)。","# EOS 快速上手指南\n\nEOS 是一个轻量级的纯头文件 3D 可变形人脸模型（3DMM）拟合库，基于现代 C++11\u002F14 编写。它支持多种主流人脸模型（如 SFM, BFM, 4DFM），提供快速的姿态、形状及表情拟合功能，并包含 Python 绑定。\n\n## 环境准备\n\n### 系统要求\n*   **编译器**: GCC >= 6, Clang >= 5, Visual Studio 2017 (15.5+), 或 Xcode 9.2+。\n*   **构建工具**: CMake >= 3.8.2 (MSVC 需 >= 3.10.0)。\n*   **操作系统**: Linux, macOS, Windows。\n\n### 依赖说明\n*   **核心库与 Python 绑定**: **无需任何外部依赖**。\n*   **示例程序与测试**: 需要以下库（仅用于运行示例，非核心库必需）：\n    *   Boost (system, filesystem, program_options) >= 1.71.0\n    *   OpenCV (core, imgproc, highgui) >= 2.4.3\n*   **Python 环境**: 若使用 Python 绑定，需确保默认编译器为 GCC >= 7 或 Clang >= 5。\n\n> **提示**: Windows 用户强烈推荐使用 [vcpkg](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg\u002F) 安装 Boost 和 OpenCV 依赖。\n\n## 安装步骤\n\n### 1. 克隆仓库\n务必使用 `--recursive` 参数以下载必要的子模块（如 Eigen, cereal 等）。\n\n```bash\ngit clone --recursive https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos.git\n```\n\n### 2. 编译与安装\n创建构建目录并执行 CMake 配置。\n\n```bash\nmkdir build && cd build\ncmake -G \"\u003Cyour favourite generator>\" ..\u002Feos -DCMAKE_INSTALL_PREFIX=..\u002Finstall\u002F\nmake && make install\n# Windows 用户可在此步打开生成的解决方案文件并在 Visual Studio 中构建\n```\n\n*   **依赖管理提示**: 如果手动管理依赖路径，可复制 `initial_cache.cmake.template` 为 `initial_cache.cmake`，修改路径后通过 `-C ..\u002Feos\u002Finitial_cache.cmake` 传递给 cmake。\n*   **Linux 构建类型**: 建议添加 `-DCMAKE_BUILD_TYPE=Release` 以优化性能。\n\n### 3. 安装 Python 绑定 (可选)\n可以直接通过 PyPI 安装，但需确保系统满足编译器要求。\n\n```bash\npip install eos-py\n```\n\n若自动安装失败，可手动从源码构建：\n```bash\ncd eos\nmkdir build && cd build\ncmake -DEOS_GENERATE_PYTHON_BINDINGS=on ..\nmake && make install\n```\n*注意：使用 Python 绑定时，仍需从本仓库获取数据文件（位于 `share\u002F` 目录）。*\n\n## 基本使用\n\n### 方式一：运行示例程序 (C++)\n安装完成后，示例数据和模型位于 `install\u002Fbin\u002Fdata\u002F` 和 `install\u002Fshare\u002F`。\n\n**简单模式 (仅拟合姿态和形状):**\n```bash\nfit-model-simple -m ..\u002Fshare\u002Fsfm_shape_3448.bin -p ..\u002Fshare\u002Fibug_to_sfm.txt -i data\u002Fimage_0010.png -l data\u002Fimage_0010.pts\n```\n\n**完整模式 (包含表情混合形变和边缘拟合):**\n```bash\nfit-model -i data\u002Fimage_0010.png -l data\u002Fimage_0010.pts\n```\n*   **输出**: 生成 `.obj` 格式的 3D 形状文件和 `.png` 格式的纹理贴图。\n*   **参数查看**: 运行 `fit-model --help` 查看所有可用参数。\n\n### 方式二：Python 调用\n安装 `eos-py` 并确保能访问到模型文件（如 `sfm_shape_3448.bin`）。\n\n```python\nimport eos\nimport numpy as np\n\n# 加载模型 (路径需指向实际文件位置)\nmodel = eos.morphablemodel.load_model(\"eos\u002Fshare\u002Fsfm_shape_3448.bin\")\n\n# 生成一个随机样本\nsample = model.get_shape_model().draw_sample([1.0, -0.5, 0.7])\n\n# 查看文档\nhelp(eos)\n```\n\n更多详细代码示例请参考仓库中的 `examples\u002Ffit-model.cpp` 或 `python\u002Fdemo.py`。","某计算机视觉团队正在开发一款实时虚拟主播系统，需要将用户的 2D 摄像头画面快速映射为高精度的 3D 面部模型。\n\n### 没有 eos 时\n- **算法复现成本高**：团队需手动复现经典的线性姿态估计与形状拟合论文（如 Aldrian & Smith, 2013），耗时数周且极易引入数学推导错误。\n- **多模型适配困难**：若要切换 Basel Face Model (BFM) 或 Surrey Face Model (SFM) 等不同数据源，必须重写大量底层数据解析与 PCA 模型加载代码。\n- **部署门槛极高**：现有重型深度学习方案依赖庞大的推理引擎和 GPU 资源，难以在普通笔记本或边缘设备上流畅运行。\n- **表情控制单一**：缺乏内置的表情混合形状（Blendshapes）支持，难以通过简单的线性参数实时生成愤怒、惊讶等六种基础情绪。\n\n### 使用 eos 后\n- **开箱即用核心算法**：直接调用 eos 内置的 `fit_shape_to_landmarks` 等函数，瞬间实现从 2D 关键点到 3D 网格的鲁棒拟合，研发周期从数周缩短至几天。\n- **无缝切换主流模型**：利用 MorphableModel 类原生支持 BFM 2017、SFM 等多种标准格式，仅需替换二进制文件即可验证不同模型效果，无需修改代码。\n- **轻量级高性能部署**：凭借纯现代 C++ 编写且无外部依赖的特性，eos 轻松嵌入现有 C++ 管线，在 CPU 上即可实现低延迟的实时渲染。\n- **灵活的表情驱动**：直接利用库中集成的 6 种线性表情基底，通过调整系数即可让虚拟角色实时展现丰富的面部情绪，极大提升了交互自然度。\n\neos 通过将复杂的 3D 人脸拟合数学理论封装为轻量、无依赖的工业级代码，让开发者能专注于应用创新而非底层算法重复造轮子。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpatrikhuber_eos_f6683a5c.png","patrikhuber","Patrik Huber","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fpatrikhuber_865efe91.jpg","Hi! I'm a Principal Computer Vision Engineer at Mimetrik, developing solutions to clinical problems in dentistry | Love coding in modern C++ | Founder of 4dface","Mimetrik","United Kingdom",null,"patrik_cpp","http:\u002F\u002Fwww.4dface.io","https:\u002F\u002Fgithub.com\u002Fpatrikhuber",[84,88,91,95],{"name":85,"color":86,"percentage":87},"C++","#f34b7d",94.9,{"name":89,"color":90,"percentage":32},"Python","#3572A5",{"name":92,"color":93,"percentage":94},"CMake","#DA3434",1.9,{"name":96,"color":97,"percentage":98},"MATLAB","#e16737",1.1,1972,598,"2026-04-02T08:32:18","Apache-2.0",4,"Linux, macOS, Windows","未说明 (基于 CPU 的 C++ 库，无需 GPU)","未说明",{"notes":108,"python":109,"dependencies":110},"核心库为纯头文件形式，无外部依赖；构建示例或测试时需安装 Boost 和 OpenCV；克隆仓库时必须使用 '--recursive' 参数以下载子模块；Windows 用户建议使用 vcpkg 管理依赖；Python 绑定可通过 'pip install eos-py' 安装，但需确保系统默认编译器版本足够新（Linux 下建议 gcc-7+）。","未说明 (需配合支持 C++11\u002F14 的编译器，如 Linux 下建议 gcc-7+ 或 clang-5+)",[111,112,113,114],"CMake >= 3.8.2 (MSVC 需 >= 3.10.0)","Boost >= 1.71.0 (仅示例程序需要)","OpenCV >= 2.4.3 (仅示例程序需要)","Ceres Solver (仅非线性拟合实验功能需要)",[15,14,116],"其他",[118,119,120,121,122,123,124,125,126,127,128,129,130],"computer-vision","face-models","modern-cpp","machine-learning","image-processing","cross-platform","3d-face","3dmm","c-plus-plus","python","3d-face-reconstruction","cpp14","cpp17","2026-03-27T02:49:30.150509","2026-04-10T20:45:46.043945",[134,139,144,149,154,158],{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},28080,"如何从 .ply 或 .obj 文件创建 PCA 模型？","创建 PCA 模型时，数据矩阵的排列方式（行优先或列优先）决定了协方差矩阵的计算公式。如果每个样本是数据矩阵的一行（行优先），协方差矩阵为 A^T * A；如果每个样本是一列（列优先），则为 A * A^T。eos::pca 的实现基于行优先约定。此外，务必确保在进行 PCA 之前对数据进行去均值处理（减去均值向量）。","https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fissues\u002F26",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},28081,"使用 BFM 模型运行 fit-model-simple 时出现段错误（Segmentation fault）怎么办？","段错误通常是因为模型文件不匹配或缺少必要数据。特别是，SFM 模型的表达式混合形状文件（如 expression_blendshapes_3448.bin）不适用于 BFM 模型。若要在 BFM 上使用表情功能，需要寻找或创建专为 BFM 训练的表达式模型（例如基于 FaceWarehouse 数据的模型）。另外，如果模型本身不包含纹理坐标，调用提取纹理函数也会导致崩溃，需确保模型数据完整或使用不带纹理提取的流程。","https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fissues\u002F260",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},28082,"可以使用 OpenCV 的 solvePNP 或 calibrateCamera 进行相机矩阵估计吗？为什么结果不同？","透视相机估计不能通过线性方法（如标准的 PnP 线性解）完全解决，因为透视投影包含除以深度 z 的操作，引入了非线性。此外，单张图像下的透视相机估计存在歧义性（除非已知相机传感器尺寸或焦距）。如果需要更准确的透视相机估计，建议参考 eos 项目中的 fit-model-ceres.cpp 示例，它展示了如何使用非线性优化（Ceres Solver）来解决此问题。","https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fissues\u002F64",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},28083,"使用转换脚本将 BFM2009 转换为 eos 格式后运行拟合算法出现段错误，原因是什么？","旧版本的转换脚本可能存在缺陷，未能正确转换特征值（eigenvalues），从而导致生成的二进制文件在拟合时崩溃。维护者已提交并测试了新的转换脚本（commit 7d918d9），该脚本能生成与巴塞尔大学 AVSS 出版物中一致的采样结果。请拉取最新代码并使用更新后的脚本重新转换 BFM2009 模型文件。","https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fissues\u002F95",{"id":155,"question_zh":156,"answer_zh":157,"source_url":153},28084,"在哪里可以找到适用于 BFM 模型的纹理坐标（texture coordinates）文件？","BFM 原始模型通常不包含纹理坐标。用户需要自行寻找或通过其他工具生成对应的 .obj 文件以获取纹理坐标。社区中曾讨论过基于 FaceWarehouse 或其他数据集创建的带纹理 BFM 变体。如果没有现成的文件，可能需要手动对齐或使用第三方软件为 BFM 网格生成 UV 映射。",{"id":159,"question_zh":160,"answer_zh":161,"source_url":143},28085,"如何在 eos 中使用 BFM 模型配合表情混合形状（expression blendshapes）？","默认的 expression_blendshapes_3448.bin 仅适用于 SFM_3448 模型，不能直接用于 BFM。若要使用 BFM 进行带表情的拟合，必须找到专门为 BFM 训练的表情基。可以搜索项目的历史 Issue，维护者曾指出存在基于 FaceWarehouse 数据创建的 BFM 表情模型。此外，最新版本的 BFM 可能已包含有限的表情集合，建议检查官方发布的最新版本。",[163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,243,248,253,258],{"id":164,"version":165,"summary_zh":166,"released_at":167},188975,"v1.5.0","本次发布仅包含几处非常细微的代码优化，以及将持续集成迁移至 GitHub Actions。\n\n这将是最后一个支持 C++14 的版本。下一个版本将要求使用 C++17 编译器。\n\n变更概览：\n- 添加了 `vcpkg.json` 文件，以便在本地开发中使用 vcpkg 管理依赖。\n- 更新了 CI：从 Appveyor 和 Travis 切换到 GitHub Actions，并在 CI 中启用 vcpkg 缓存。\n- 新增了一个 `.yml` 配置文件，用于通过 cibuildwheel 构建 Python 绑定（https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fpull\u002F361，感谢 @omar-h-omar！）。\n- 改进了 Python 绑定的适配性 (#354) fbb07631934585005c9fd092e254cae6278a9973（由 @omar-h-omar 提供）。\n- 将 pybind11 升级至 2.13.6（支持 Python 3.12），toml11 升级至 3.8.1，Cereal 更新至最新 master 分支。\n- 改进了 `LandmarkMapper` 对混合映射的支持：现在 `LandmarkMapper.hpp` 中新增了 `get_vertex_index()` 函数，该函数适用于两种映射场景——直接映射（地标 ID 直接对应映射文本文件中的顶点索引）和间接映射（地标 ID 映射到通用地标名称，再由通用地标名称通过 `MorphableModel` 内部的 `landmark_definitions` 映射为顶点索引，例如 4DFM 就采用这种模式）。（61ccbcb88a527b21f14f9303a84ed686b3830e0f, 165d17c00215113e8ea15c6210701d3692a5b950）\n- 为仅包含中性形状的模型以及基于 PCA 的表情模型添加了 `get_shape_at_point()` 方法。（3445b1ccd2b8fc48b132c90c3fe8b8987d2a334a, 32760194ddc21d5012a3488f5100a2cb6be87fa0）\n- 其他一些小的 `#include` 引入及构建相关的修复与更新。\n\n得益于新的 `cibuildwheel` CI 流程，现已在 PyPI 上提供了适用于 Windows、Linux 和 macOS 各种 Python 版本的 Python 轮子包：https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F1.5.0\u002F#files","2024-12-10T23:35:53",{"id":169,"version":170,"summary_zh":171,"released_at":172},188976,"v1.4.0","本次发布包含多项重大更新，以及一些较小的“维护性”改进。\n\n* 完全移除了 GLM 库的使用，现全程采用 Eigen 类型。（例如：413c9f96302286db346384e8be4a371557003a18、7e99ab18cd538e8d8ddd4b78affa56a8f00dcfe2、a23ee0bacbd32f2649211a88817c23f3d246c7fc、096b68e3fb560787871bf7be91b2fd914a353be6 等提交）。这简化了大量代码。使用 Eigen 重写了 `glm::project()`、`perspective()` 和 `ortho()` 函数（参见 [eos\u002Frender\u002Fmatrix_projection.hpp](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Finclude\u002Feos\u002Frender\u002Fmatrix_projection.hpp)）。\n* 使用 Eigen 重写了非线性 Ceres 拟合。这意味着不再需要处理 `GLM_FORCE_UNRESTRICTED_GENTYPE`。Eigen 与 Ceres 的配合更加顺畅。进行了多项改进，并重命名了大多数代价函数——详情请参阅 d101ca546118ae8736920915c6ac0dead448161f 提交信息。此外，还重构了 `PriorCost` 并将其更名为 `NormCost`（e79da919a14b2449acbf8eff57572238e205ed95），并更新了 fit-model-ceres。\n* 现在实现了四元数（或旋转矩阵）与欧拉角之间合理且正确的转换（1023e4b09a8c88f0f7dae25b7f83785f2d997a15、a23ee0bacbd32f2649211a88817c23f3d246c7fc）。\n* 添加了必要的 Python 绑定，使得拟合循环现在可以用 Python 编写和自定义（#347）（感谢 @omar-h-omar）。\n* 将 eigen3-nnls、nanoflann、toml11 和 pybind11 子模块更新至最新版本。尤其是 toml11 进行了大幅更新，而更新后的 pybind11 已支持 Python 3.11。\n* 虽属小幅改动，但可能影响下游代码：将 `fitting::concat` 移至 `contour_correspondence.hpp`（1029f96f8bd8fa66b55ad1f73962b14aa3fc0f85）。\n* 对 CMake 脚本进行了一些现代化改造。移除了针对 Boost 的 `add_definitions()`（1de80682ad38f0e5784302e3089b52b6aca5ff39），并在可用时尽可能使用 CMake 目标（例如 `Ceres::ceres`）。\n\n[文档网站](https:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F)已更新至 v1.4.0。\n\n更新后的版本已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F) 上发布，提供了适用于 Windows (x64) 平台的 Python 3.9、3.10 和 3.11 的预编译轮子包，其他平台则支持源码安装。\n\n注意：下一次发布很可能需要 C++17 标准，并且将不再支持以 C++14 模式编译。","2023-03-27T20:15:39",{"id":174,"version":175,"summary_zh":176,"released_at":177},188977,"v1.3.0","这是一个次要维护版本，但包含一项重要变更，因此版本号提升至 1.3.0，以避免对用户造成意外：`3rdparty\u002F` 目录下的 Eigen 版本已从 3.3.4 更新至最新的 3.4.0。\n\n完整发布说明：\n* `3rdparty\u002F` 目录下的 Eigen 版本已从 3.3.4 更新至 3.4.0。该子模块现在也使用官方的 Eigen GitLab 地址。\n* 添加了一个用于加载利物浦-约克头部模型（LYHM）的脚本（1153e77dab41161f91c1bdeece72650b0956317a）。\n* 新增了 `CITATION.cff` 文件，以便更方便地正确引用 eos。\n* 对部分 Python 绑定的 `__repr__` 方法进行了一些更新（9b8b3509e609be026f56d98073c2cb6699c55978）。\n* 在 Python 中将 `ExpressionModelType` 的 `None` 替换为 `none`，以避免与 Python 关键字 `None` 冲突（85d09d255da4d57817e0263a06aec0626ed38fed）。\n* 为 `eos::core::Mesh` 的 Python 绑定添加了一个构造函数，使创建 `Mesh` 对象更加便捷（b2f24a12123b0e2409c139cc5d991e3b2a326454）。\n* 将 pybind11 更新至 2.9.1。\n\n注意：在未来的某个版本中，很可能会放弃对 C++14 的支持，并将符合 C++17 标准的编译器作为使用 eos 的最低要求。","2022-04-09T21:27:18",{"id":179,"version":180,"summary_zh":181,"released_at":182},188978,"v1.2.1","这是一则后续更新，将 Python 绑定推送到 PyPI：\n\n已将 pybind11 更新至其最新的 master 提交，并将 Python 绑定的 Visual Studio CMake 生成器从 VS 2017 更改为 VS 2019（commit: 75ecca4ac84dce5a1a5113704f7f8714060663da）。\n\neos\u002F@patrikhuber 目前已加入 GitHub Sponsors 计划。如果您觉得 eos 很有价值，现在可以通过 [成为赞助者](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fpatrikhuber) 来支持我们。\n\n**请查看 [v1.2.0 发布说明](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\u002Ftag\u002Fv1.2.0)，了解本次发布中的所有更改和改进！**\n\n更新后的版本已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F) 上线。","2020-08-04T11:42:53",{"id":184,"version":185,"summary_zh":186,"released_at":187},188979,"v1.2.0","本次发布更新了渲染器和纹理提取功能，全面支持透视投影（以及正交投影），并包含多项其他较小的改进和修复。\n\n新增\u002F重大改进：\n* 改进了 `v2::extract_texture(...)`，使其支持带有接缝的纹理坐标（63243b2）。\n* 将 `v2::extract_texture(...)` 移至 `eos::render` 命名空间，并将其设为新的默认函数（08cba28）。调用代码需稍作调整，但该函数的参数与之前非常相似。新的纹理提取功能使用新渲染器的 `Rasterizer`，同时支持正交和透视投影。\n* 移除了旧的 `extract_texture(...)` 函数，该函数仅支持仿射相机（8fd1735）。\n* 改进了 `SoftwareRenderer::render(...)`，使其能够正确处理带有接缝的纹理贴图（c1defba）。\n* 移除了旧的 `render(...)` 函数，将 `v2::SoftwareRenderer` 移至 `render` 命名空间，并添加了一个针对新渲染器的便捷函数，其调用方式与旧渲染器几乎相同（12a4120）——调用代码需进行少量调整。新渲染器的核心保持不变，但架构已调整，更贴近硬件（或 OpenGL）流水线，采用顶点着色器和片段着色器。结果应完全一致，且参数也相同。\n  - _注意：_ 以往未指定顶点颜色的网格会以颜色 `(0.5, 0.5, 0.5)` 渲染，而在新渲染器中，它们将使用默认的黑色（bd01644）。无论如何，尝试渲染既没有顶点颜色也没有纹理的网格并无意义。\n* 添加了支持正交和透视投影的顶点可见性检查函数（0db88d3）。引入了一个 `enum class` 类型的 `ProjectionType`，用于指定使用正交投影还是透视投影。\n\n修复：\n* 修改了 `Image` Python 绑定中的步长，以适应行优先的 `Image` 类（dc0fce8）。（`Image` 类在较早的提交中已改为行优先存储，但 Python 绑定一直未相应更新。）\n* 将 `mpark::variant` 更新至最新主分支（bd590bf）。这应能修复在 C++14 模式下编译 eos 时，某些编译器出现的几个编译错误。\n\n次要改进\u002F变更：\n* 改进了 `v2::extract_texture(...)`，使其在投影后的模型部分超出图像范围时不会崩溃（442497e）。\n* 为 `SoftwareRenderer` 和 `Rasterizer` 添加了 `clear_buffers()` 函数，用于清空颜色缓冲区和深度缓冲区（1e8a875）。\n* 将颜色缓冲区的清除颜色设置为完全透明（fc1465e）。\n* 为 `PcaModel` 添加了 `project(...)` 函数（4694d6f）（请参阅 #295 中可能存在的问题）。\n* 将 `render\u002Fdraw_utils.hpp` 文件移动至 `render\u002Fopencv\u002F` 目录下（914fdd5）。\n* 添加了新的无需 OpenCV 的 `draw_wireframe(...)` 函数，并为其添加了 Python 绑定（f1f83d0）。\n* 在整个代码库中将“isomap”更名为“texturemap”，并将示例应用的输出文件名 `\u003Cfilename>.isomap.png` 更改为 `\u003Cfilename>.textur","2020-08-01T19:01:02",{"id":189,"version":190,"summary_zh":191,"released_at":192},188980,"v1.1.2","这是一次小幅更新，主要对从萨里大学 CVSSP 加载 `.scm` 模型的内部实现进行了轻微优化，并在 Python 绑定中新增了 `load_scm_model(...)` 函数，以便可以直接在 Python 中加载这些模型。\n\n变更与改进：\n\n* 移除了 `eos\u002Fmorphablemodel\u002Fio\u002Fcvssp.hpp` 对 OpenCV 的依赖，并对文档做了一点澄清 [dd4cd62d4724f4368916875d1303f03e98f2f0fb 及后续提交]\n* 随后，工具集（其中仅 `utils\u002Fscm-to-cereal` 仍需 OpenCV）现在可以在不依赖 OpenCV 的情况下构建 [d465a042a860283ba3f11ce15683bf186a607273]\n* 在 Python 绑定中新增了 `load_scm_model(...)` 函数（位于命名空间 `eos.morphablemodel.load_scm_model(...)` 中）[b82b85244d5e5ed55a257d0483d21bcfcef4c9c6]\n\n更新后的版本也已在 [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F) 上发布。","2019-06-30T21:22:34",{"id":194,"version":195,"summary_zh":196,"released_at":197},188981,"v1.1.1","本次发布主要修复了 `write_obj(...)` 和 `write_textured_obj(...)` 函数，使其在网格包含纹理三角形索引（tti）时，也能将其写入文件。此前，对于使用不同纹理三角形索引集的网格，由于 tti 未写入 OBJ 文件，可能导致头顶区域出现奇怪的伪影。[c25319769f3d103293d62c857a1b330631c90e5f]\n\n其他小幅改动与改进：\n* 将 `write_obj(...)` 和 `write_textured_obj(...)` 移至独立的头文件 `eos\u002Fcore\u002Fwrite_obj.hpp` 中，以避免直接包含 `Mesh.hpp` 时间接引入 `\u003Cfstream>` 和 `\u003Cstring>` [a040c0ed73b6df426fdfedb7fa7804e28514a879]。\n* 在 `eos::core` 命名空间中，所有头文件保护宏均添加了 `EOS_` 前缀，以降低可能的命名冲突风险 [4381fd16b994c4533e9af2fe6cc1f63b5adea48a]。\n* `write_obj(...)` 现在也会翻转 UV 坐标的 Y 轴，以与 `write_textured_obj(...)` 保持一致 [7ce291825a916190aedf790b465ec68dcf49373f]。\n* `setup.py` 现在会在 Windows 系统上检查是否安装了 CMake 3.10.0 [3dd69f7727167345f135421a918f2e1ec7c6b5b7]。","2019-05-28T20:03:14",{"id":199,"version":200,"summary_zh":201,"released_at":202},188982,"v1.1.0","此版本包含针对具有独立 `texture_triangle_indices` 的模型的重要修复，例如 [4DFM](https:\u002F\u002Fwww.4dface.io\u002F4dfm\u002F)。此外，还包含若干其他小幅改进以及更新的文档。\n\n修复：\n* 现在所有 `MorphableModel` 成员函数中的 `sample_to_mesh(...)` 都会正确传递 `texture_triangle_indices`（e598203ddf8ec370cc86b6ab3e1ea8045f6fb705）。此前，`get_mean` 和 `draw_sample` 函数（除了接受形状、颜色和表情系数的那个之外）会在 `MorphableModel` 包含纹理三角索引的情况下返回缺少这些索引的网格。这实际上可能导致错误代码被执行或出现不良的内存访问——因为 `sample_to_mesh(...)` 中用于检查这一点的断言在 Release 和 RelWithDebInfo 构建中不会触发，所以我们一直未能及时发现这个问题。现在，我们能够正确处理包含纹理三角索引的模型，比如 4DFM。\n\n小幅改进与变更：\n* [http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F](http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F) 上的文档现已更新至 eos `v1.1.0`\n* 在 Python 绑定中添加了 `Mesh::tti`（afc80dfb4bdd3160c867e6327be0ec3818da1fb0）\n* 将网格法线计算函数移至 `eos\u002Frender\u002Fnormals.hpp` 头文件（5b6cd230ffac75c8139bb1e74be8d888eb830004）\n* 添加了用于计算网格面法线和顶点法线的函数（7af6131a334666778e96250bfbbaab784186f7ff）\n* 将 `include\u002Feos\u002Frender\u002Futils.hpp` 重命名为 `transforms.hpp`\n* 改进了加载版本号异常的 `MorphableModels` 时的错误提示信息（41fddf6d732df07c5077139b74235b995f7edf4f）\n* 将 `ray_triangle_intersect(...)` 移至其独立的头文件（5b574092d562e8628b95edbf4af83a2f8049b5e9）\n* 添加了一个简单的图像缩放函数（ae533982269246fbb56cf2f2260c9e09a59d49ee）\n* 改进了 Image Watch 中的 natvis `Image` 可视化器：对于 3 通道和 4 通道图像，将通道类型设置为 RGB(A)（622fc35a0e6fd22938237e834c1511c7a749bbf4）\n\n进行中的变更：\n\n这些是在 `render::v2` 命名空间中关于新渲染和纹理提取功能的正在进行中的更改——这些功能在原理上可行，但尚未经过充分测试，也尚未在 eos 中广泛使用。\n* 解除了对 `v2::extract_texture(...)` 的注释，并更新了所有受影响的代码（23d07554a014d7ce1a1fcafe13e4173074175512）\n* 更新了 `v2::SoftwareRenderer` 及相关代码，使其能够与最新的 eos 变更兼容，并且无需 OpenCV 即可编译。","2019-03-01T19:28:23",{"id":204,"version":205,"summary_zh":206,"released_at":207},188983,"v1.0.1","小型维护版本，包含更新的 Python 绑定、修复的 `demo.py` 脚本（已更新以兼容最新的 eos 变更）以及修复的 BFM2009\u002F2017 转换脚本。\n\n有关最新变更，请参阅 [v1.0.0](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\u002Ftag\u002Fv1.0.0) 的发行说明！","2018-12-14T15:46:17",{"id":209,"version":210,"summary_zh":211,"released_at":212},188984,"v1.0.0","eos 的 API 和功能长期以来一直非常稳定，经受住了考验，展现出强大的鲁棒性和实用性。本次发布的主要亮点就是激动人心的 v1.0 版本升级！\n\n近期的一项重大新增功能是支持 _4D 面部模型_（4DFM），这是一种包含 36 种表情\u002F动作单元的全头 3D 可变形面部模型，由 [4dface.io](https:\u002F\u002Fwww.4dface.io\u002F4dfm\u002F) 提供。\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fpatrikhuber\u002Feos\u002Fgh-pages\u002Fimages\u002F4dfm_color_sample.jpg\" width=20% alt=\"4D 面部模型彩色图\">\u003C\u002Fimg>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fpatrikhuber\u002Feos\u002Fgh-pages\u002Fimages\u002F4dfm_shape.png\" width=20% alt=\"4D 面部模型形状图\">\u003C\u002Fimg>\n\n此次更新还包含了最新版本的 pybind11，并在 Python 绑定中新增了 `sample_to_mesh()` 函数。\n\n其他近期的改进还包括：支持带有接缝的 UV 坐标；在 `MorphableModel` 类中引入地标和顶点定义，以便为特定顶点赋予固定的语义含义；以及许多其他优化和增强。更多详细信息请参阅 [v0.17.0](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\u002Ftag\u002Fv0.17.0) 和 [v0.18.0](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\u002Ftag\u002Fv0.18.0) 的发行说明。","2018-12-10T12:03:35",{"id":214,"version":215,"summary_zh":216,"released_at":217},188985,"v0.18.0","This release adds support for texture maps with seams. When a texture map contains seams, the vertices at the seams are usually duplicated, and then some of the triangle indices are different in uv space from the triangulation of the 3D vertices. This change allows to support the texture coordinates of the full-head _4D Face Model_ (4DFM).\r\n\r\n* The `MorphableModel` file format version was increased to `4` to store an additional member containing the uv triangulation (85cc563afe7e1916fa98d577c5b036cb622c8806)\r\n* Updated `extract_texture` to support uv coordinates with seams (a70ded3d3c7644b54fd97878183d7b5c46323624)\r\n\r\nOther minor changes:\r\n* Made the return type of get_texture_coordinates const ref (3a25d5278f131b72fc1f91c5009f4684a2dcf97f)\r\n\r\n**Please also have a look at the [changes in v0.17.0](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Freleases\u002Ftag\u002Fv0.17.0).**","2018-10-23T23:16:33",{"id":219,"version":220,"summary_zh":221,"released_at":222},188986,"v0.17.0","This is a release with quite a few nice changes and improvements. Please read through the release notes carefully.\r\nThis release was in the `devel` branch for a few months, and never actually left the devel branch. The `MorphableModel` format version was increased to 3, from adding `landmark_definitions`. Since there are quite a few model files with this version in circulation, it was deemed best to make it an \"official\" model version and release it as v0.17.0.\r\n\r\nMajor changes & improvements:\r\n* Added (optional) landmark definitions to the MorphableModel class (8fcc2bfa4f73d1d49388e2b72f99fc2e8c57d2a4)\r\n  Models can now optionally store landmark\u002Fvertex definitions, for example mappings like `\"eye.right.outer_corner\" \u003C=> 177` from a generic name to vertex ids - and then a second mappings file can be used, that maps from 2D landmark identifiers (like the number `37` from ibug) to these generic names (`\"eye.right.outer_corner\"`). This separates the vertex _definition_ from a particular set of 2D landmarks.\r\n  Alternatively, users can still use direct mappings, like in the file `ibug_to_sfm.txt`, which map directly from 2D landmark identifiers to 3D vertex indices.\r\n* Added a getter to `MorphableModel` for `landmark_definitions` (e995b07821038567284bf02202feb6021289d1e0)\r\n* Set the `vertex_idx` in the fitting depending on whether the model contains landmark definitions (f123e518c3a85bb5deaf9d17e7c11931ede9225a)\r\n* Revamped the `Image` class to a better and more future-proof design (14b7f6f6d998bb30de3f2047fa7f6af374786f3c)\r\n  Note: The storage order is now row-major, as opposed to col-major before. In the future, we may add means to choose the storage order.\r\n* Added natvis file for Image Watch for `eos::core::Image` (be436f4d99406cfb62addabcc45303a7aa780a66)\r\n\r\nFixes:\r\n* Fix `mpark::variant` compilation error on VS >=15.8; Updated pybind11 submodule to fix errors on VS 15.8 (a45a888bbf29b251f2bd472d13a06208387e6a8b, ecc626946da2cbea42623759ff09dec6ef9eba34)\r\n\r\nMinor improvements, potentially breaking changes:\r\n* Renamed `get_all_mappings()` to `get_mappings()` (9e0f539652e28a8b461bde9a53a202c471b04677)\r\n* Created new directory `eos\u002Fcore\u002Fimage\u002F` and moved `Image_opencv_interop.hpp` there (ad06db1b9e85319e8bddbca67b52f248b4dda331)\r\n* Return `triangle_list` by const reference (a7ede7bfca5cc1929b43d629dc90db7c5c3ae14d)\r\n* Exposed a few more things to the Python bindings, particularly landmark-mappings related, and added some `__repr__` methods.\r\n* Removed the unused `initial_rendering_params` parameter from fit_shape_and_pose (ba46285497485c1ab8f0f80722e8c09eb8b26e43)\r\n\r\nOther minor changes\u002Fimprovements:\r\n* Exposed some parameters of the contour fitting to callers (54ade09b95c2680d2393d4020604c569189b8a1e, abb2dd7b29944490cbffe92f77b3a5843c8bd990, 3929d0cffd004d1bfae29cde43b9f48e2f35067f)\r\n* Improved `read_obj` a bit to handle a few more cases. Still, don't rely on it to parse every `.obj` file, it's not meant to do that. Use your own or `assimp` or something like that.\r\n\r\nAnd as always, various small improvements to the code style and to the documentation.","2018-10-23T23:11:30",{"id":224,"version":225,"summary_zh":226,"released_at":227},188987,"v0.16.1","A few minor updates and fixes:\r\n\r\nFixes:\r\n* Added missing inline to `draw_sample` (a6900a2)\r\n* Fixed constructing a 4x4 rotation matrix `R` instead of 3x3 in the Python bindings of `ScaledOrthoProjectionParameters` (5863f3b)\r\n\r\nUpdates:\r\n* Moved `render::Rect` to `core` namespace\r\n* Added Python bindings for `eos::core::Rect` and `eos::core::Landmark\u003CEigen::Vector2f>`. The Python bindings are now using `Landmark` and `LandmarkCollection` natively, without having to keep a separate list of landmark identifiers.\r\n* Added README.md as `long_description` for PyPI ([link](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F))\r\n* Minor README.me\u002Finitial_cache.cmake.template updates\r\n","2018-05-20T22:01:38",{"id":229,"version":230,"summary_zh":231,"released_at":232},188988,"v0.16.0","This is a major release, bringing full support for expression PCA models. `MorphableModel`s can now either contain no expression model, a set of blendshapes, or a PCA expression model.\r\nThe `fit_shape_and_pose` supports both as well, and calls either the `_linear` or `_nnls` solver, depending on whether a model contains blendshapes or an expression PCA model.\r\n\r\nThe main changes that go along with that:\r\n* Updated the `MorphableModel` file format to version to `2` to include an optional expression model. Version `1` models can still be read.\r\n* Added a flag `ExpressionModelType` to `MorphableModel` to easily query the type of the expression model.\r\n\r\n**Note:** The behaviour of `MorphableModel::get_mean()` has been changed: It now returns the overall shape **and** expression mean. (see #188)\r\n\r\nOther small additions:\r\n* Updated the BFM2017 converter script to convert and save the expression PCA model too.\r\n* Added a fitting function for fixed, given correspondences, that runs the fitting loop without contour fitting. (see [here](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fv0.16.0\u002Finclude\u002Feos\u002Ffitting\u002Ffitting.hpp#L606))\r\n* The [online doxygen documentation](http:\u002F\u002Fpatrikhuber.github.io\u002Feos\u002Fdoc\u002F) has been updated to v0.16.0.\r\n\r\nAs always, when updating from the GitHub repository, make sure to run `git submodule update --init --recursive`.\r\n\r\nThe binary files are provided for convenience only - it is recommended to build the examples from source, and use the library by cloning the GitHub repository.\r\n\r\nWindows binaries are compiled with Windows 10 64bit, Visual Studio 2017. A .whl with python bindings for python 3.6 is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Feos-py\u002F).\r\nLinux binaries are compiled with Linux Mint 18.3, based on Ubuntu 16.04, gcc-7. Make sure to [follow the instructions](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos#python-bindings) for how to use `gcc-7` with `pip` if using the Python bindings on Linux.","2018-05-14T13:14:39",{"id":234,"version":235,"summary_zh":236,"released_at":237},188989,"v0.15.1","This release improves a few crucial things over the last release.\r\n\r\nSupport for pre-C++17 compilers should be a lot better again - eos compiles again in C++14 mode on VS 2017, and, although not officially tested in CI, likely also compiles again with the likes of `g++-5`:\r\n* eos now seemlessly uses `akrzemi1::optional` on all pre-C++17 compilers, not only on Apple platforms.\r\n* Serialisation for `optional` also works correctly on all platforms (pre-C++17 and C++17 compilers); and updated cereal to the latest `develop` branch commit.\r\n* `optional` now also works within the python bindings for pre-C++17 and C++17 compilers.\r\n* Added `eos::cpp17::clamp`, which uses `std::clamp` on C++17 compilers, or a fallback otherwise.\r\n\r\nMatlab bindings:\r\n* Updated the `eos-matlab-fitting` bindings! They now work again in the latest version to use the fitting from Matlab.\r\n* Disabled the `eos-matlab-render` bindings for now, as they would be more work to update. Having the `fitting` bindings back should suffice for most use cases.\r\n\r\nOther small things:\r\n* A few small improvements to the main CMakeLists.txt (86fbfa17cf73892196ac6f95b48ba2b67b8f66a6).\r\n* Fixed a missing inline, missing include, added a few `const`s, a couple documentation updates.\r\n","2018-05-03T12:23:53",{"id":239,"version":240,"summary_zh":241,"released_at":242},188990,"v0.15.0","eos is now fully working on Apple Xcode again and CI-tested with Xcode 9.2.\r\n\r\nMain changes:\r\n\r\n* Use of `eos::cpp17::optional` throughout the code base, to support platforms that do not have `\u003Coptional>` yet (currently only macOS - `#ifdef __APPLE__`). It is a namespace alias, and will be resolved to `std::optional` on compilers that have `\u003Coptional>`.\r\n* [akrzemi1\u002FOptional](https:\u002F\u002Fgithub.com\u002Fakrzemi1\u002FOptional) is directly integrated into eos and used on macOS\r\n* Added official `eigen-git-mirror` as submodule at tag 3.3.4, instead of the patrikhuber\u002Feigen fork\r\n* Updated `Keyframe`-related code to work again with the latest eos version\r\n* Minor other improvements and updates (see https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fcompare\u002Fv0.14.0...v0.15.0 for all the details)","2018-03-12T19:28:30",{"id":244,"version":245,"summary_zh":246,"released_at":247},188991,"v0.14.0","This is an update release with various small improvements throughout and two highlights:\r\nOne major highlight is proper (and tested) support for the BFM2009 (and partially the BFM2017).\r\nAnother highlight is that the `multi_image_fit_devel` branch is finally merged into master, and multi-frame fitting is thus now available in the main version.\r\n\r\nThe changes include, alongside other minor changes:\r\n\r\n* Merged multi-frame fitting from `multi_image_fit_devel` branch. Thank you very much @PhilippKopp  for the contribution!\r\n* Added new (and correct) script to convert the BFM2009\r\n* Added script to convert the BFM2017\r\n* Updated syntax of the ibug_to_bfm*.txt files to TOML\r\n* Add Python and Matlab scripts to generate edge-topology files\r\n* Updated wiki with all BFM info & files ([link](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fwiki#using-the-library-with-the-basel-face-model-bfm))\r\n* Clamping the colours to [0, 1] in `sample_to_mesh`\r\n* Check `find_if` result for `std::end` in `get_nearest_contour_correspondences` to avoid continuing in Release builds without any error message\r\n* Added lots of `const` qualifiers where possible\r\n* Ran clang-format on the whole codebase\r\n* Added some minor useful things to the Python bindings (e.g. default c'tors for `Mesh` and `Blendshape`)\r\n* Updated Ceres code and example to work with the recent eos changes\r\n","2018-01-11T00:11:58",{"id":249,"version":250,"summary_zh":251,"released_at":252},188992,"v0.13.0","This release contains some major changes, mainly to the software-side of the library, and not to the algorithms.\r\n\r\n* The library is now completely free of external dependencies, it does not depend on Boost and OpenCV anymore. All dependencies are header-only and included as submodules.\r\n* The minimum required compilers are gcc-7, clang-5 and VS2017 Update 3.\r\n* Changed the configuration file format from the custom boost::property_tree format to TOML. This mainly affects [share\u002Fibug_to_sfm.txt](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Fshare\u002Fibug_to_sfm.txt).\r\n\r\nAll in all, these changes make using the library much easier, and they should especially enable installation of the python bindings via `pip install eos-py` on any system, given >=cmake-3.8.2 and a recent compiler.\r\n\r\nThe changes, alongside other minor changes, include:\r\n\r\n* Replacing all OpenCV vector types with `Eigen::Vector`\r\n* Replacing glm types in the Python bindings with Eigen types\r\n* Changed the pose fitting from OpenCV to Eigen - this could potentially be a bit of a speed-up\r\n* Added own Image class (very basic, just covering the barebones needed to replace cv::Mat and to represent images). There is a converter function to and from `cv::Mat` ([eos\u002Fcore\u002FImage_opencv_interop.hpp](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Finclude\u002Feos\u002Fcore\u002FImage_opencv_interop.hpp)))\r\n* Added functions to load and save PCA models (6c31092)\r\n* Added ibug to BFM landmark mappings (5dbff1e)\r\n* Updated all submodules to their newest versions\r\n* Many more small fixes and improvements (documentation fixes, added 'const' in many places, etc.)\r\n","2017-10-22T19:22:28",{"id":254,"version":255,"summary_zh":256,"released_at":257},188993,"v0.12.2","This is a minor release, mainly adding functionality to build PCA models ([`include\u002Feos\u002Fpca\u002Fpca.hpp`](https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fblob\u002Fmaster\u002Finclude\u002Feos\u002Fpca\u002Fpca.hpp)).\r\n\r\n**This will be the last version that supports gcc-5, clang-3.x, and VS2015. The next release will require >=gcc-7, >=clang-5 and >=VS2017U3.**\r\n\r\nOther minor changes:\r\n\r\n* Fix for texture mapping into destination image https:\u002F\u002Fgithub.com\u002Fpatrikhuber\u002Feos\u002Fcommit\u002F6875e08b6678046e9c04fc5860383f39d22edd4f\r\n* Fixed some missing inlines, added lots of `const`, improved documentation, updates of submodules\r\n* gcc-4.9 support removed","2017-10-19T17:18:36",{"id":259,"version":260,"summary_zh":261,"released_at":262},188994,"v0.12.1","This update brings a major speed-up of the shape and blendshape fitting. Depending on the setup (model resolution used, number of coefficients fitted), the speed-up is around 3x to 50x - typically around 10x. The shape and blendshape fitting now take only around or below 1ms per iteration (previously ~10ms). This was achieved by changing all linear algebra operations from OpenCV to Eigen.\r\n\r\nPlease see also the release notes of v0.12.0 below for the latest changes and updates, some of them breaking changes. See also the release notes of v0.12.0 for information on the PyPi package (eos-py) and the provided binaries.","2017-03-12T14:40:39"]