Git Product home page Git Product logo

tclip's Introduction

tclip

名字说明

  • T开头,代表是头像识别。
  • clip,读[klip],译为裁剪。
  • Tclip,意为自动头像识别的图片裁剪项目。

概要

用于图片裁剪,有以下特点:

  1. 能进行人脸识别。图片中有人脸,将自动视为人脸区域为重要区域,将不会被裁剪掉。
  2. 自动识别其它重要区域。如果图片中未识别出人脸,则会根据特征分布计算出重区域。 总而言之,自动识别图片中的重要区域,并且在图片裁剪时保留重要区域。
  3. 可以加水印

效果演示

人物效果演示

  • 原图

    github

  • 按照从中间截取为 400 X 225 大小大图片。效果如下:

    github

  • 使用tclip裁剪图片效果如下:

    github

景物效果演示

  • 原图

    github

  • 按照从中间截取。效果如下:

    github

  • 使用tclip裁剪图片效果如下:

    github

水印效果

  • 加水印效果

    github

在线演示

演示地址:http://demo.bo56.com/tclip

安装步骤:

源码下载

安装opencv2

此扩展依赖于opencv2.0之上版本。因此安装前先安装opencv

步骤如下:

  • 安装依赖

    yum -y install gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
  • 下载安装 opencv2

    # 下载
    wget https://github.com/opencv/opencv/archive/2.4.9.tar.gz
    
    # 解压安装包
    tar xvf 2.4.9.tar.gz
    
    # 进入opencv目录
    cd opencv-2.4.9/
    
    # 编译安装
    cmake CMakeLists.txt
    make -j $(cat /proc/cpuinfo|grep processor|wc -l)
    make install
  • 设置环境变量

    cp -p /etc/profile{,.$(date +%F_%T)}
    
    # 在/etc/profile unset i前增加PKG_CONFIG_PATH
    grep '^PKG_CONFIG_PATH' /etc/profile||sed -i '/^unset i/iexport PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' /etc/profile
    source /etc/profile
    
    [[ -f /etc/ld.so.conf.d/opencv.conf ]] && cp -p /etc/ld.so.conf.d/opencv.conf{,.$(date +%F)}
    echo "/usr/local/lib/" > /etc/ld.so.conf.d/opencv.conf
    ldconfig

安装php-tclip扩展

# 下载tclip
wget https://github.com/exinnet/tclip/archive/1.0.0.tar.gz

# 解压
tar xvf 1.0.0.tar.gz

# 进入php_ext
cd tclip-1.0.0/php_ext/

# 编译安装php-tclip
phpize
./configure --with-php-config=/usr/bin/php-config
make
make install

# 拷贝到php扩展目录
cp modules/tclip.so /path/to/extension/

# 修改php.ini 加入tclip
php -m|grep tclip.so||echo 'extension = tclip.so' >> /etc/php.ini

# 重启php-fpm
/etc/init.d/php-fpm restart

安装命令行

想使用命令行方式,可以进行如下安装

cd cd tclip-1.0.0/
chmod +x ./tclip.sh 
./tclip.sh

使用方法说明

一、在php中使用格式

tclip(文件原路径,裁剪后的图片保存路径,裁剪后的图片宽度,裁剪后的图片高度)

  • 示例:

    <?php
    $source_file = "/tmp/a.jpg";
    $dest_file = "/www/a_dest.jpg";
    $width = 400; 
    $height = 200;
    $watermark_text = ""; // 可选
    $ret = tclip($source_file, $dest_file, $width, $height, $watermark_text);
    
    // 裁剪成功 $ret 为 true
    // 裁剪失败 $ret 为 false

二、命令行

参数说明:
    -s 原图路径
    -d 裁剪后的图片保存路径
    -w 裁剪后的图片宽度
    -h 裁剪后的图片高度
    -c 配置文件路径。
       默认配置路径:/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml
    -t 水印文本
    -m 打开debug模式

./tclip -s a.jpg -d a_dest.jpg -w 400 -h 200

贡献者

tclip's People

Contributors

exinnet avatar ixqbar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tclip's Issues

几经折腾终于成功试用了tclip,感觉很好,但也有些问题想反馈一下,不知道作者是否还在维护。

1、不支持apache,编译安装好tclip扩展后apache重启时就崩溃了,关闭tclip扩展后恢复正常。(没办法,只好又重新弄了个nginx的环境来试用,成功了!感觉非常好。)
2、水印不支持中文,中文乱码
3、没有从底层判断是图片处理完成后的存放目录是否存在或者因为权限导致的读写问题,虽然能够通过php来从上层逻辑处理,但更为理想的处理方式个人认为还是应该在tclip中进行处理,建议作者能够考虑。

dose not find opencv.pc

英文:
when I compiled tclip extention for php7.2, An error occured that "dose not find opencv.pc", but I'm confirmed the opencv packege by command "pkg-config opencv --libs". It says :
[root@localhost php_ext]# pkg-config opencv --libs -L/usr/local/lib64 -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
so how can I solve this problem ?

汉语:
当我编译安装Tclip扩展的时候,屏幕上显示找不到opencv.pc,但是事实上我已经安装了opencv版本是3.4.1 (题外话,除了tclip我也安装了另外一个基于opencv的扩展phpopencv),不知道为什么tclip找不到opencv.pc 希望知道的朋友帮忙解决一下这个问题。

CentOS6下编译php-tclip扩展报错

系统信息: 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
PHP版本:5.4.25
OpenCV版本:OpenCV-2.4.10.4
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

报错信息:
configure: error: no result from pkg-config opencv --libs --cflags opencv

错误信息在在百度上google一下,发现了2个比较有用的结果:

  1. 作者的博客:
    Tclip:http://www.bo56.com/%E5%AE%89%E8%A3%85tclip%E7%9A%84php%E6%89%A9%E5%B1%95/
  2. 前同事和领导的文章:
    MacOS 安装 PHP的Tclip扩展实现更好的缩略图:
    http://segmentfault.com/a/1190000002618014

跟我的错误一样,不过他们是MAC下的,跟我的情况还不一样,根据两篇文章中的内容找了下:

  1. 执行 pkg-config opencv --libs --cflags opencv 返回结果:
-I/usr/local/include/opencv -I/usr/local/include  /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_ocl.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so -lrt -lpthread -lm -ldl 

因为源码中对该结果进行循环判断,方便阅读格式化一下,即:

-I/usr/local/include/opencv
-I/usr/local/include
/usr/local/lib/libopencv_calib3d.so
/usr/local/lib/libopencv_contrib.so
/usr/local/lib/libopencv_core.so
/usr/local/lib/libopencv_features2d.so
/usr/local/lib/libopencv_flann.so
/usr/local/lib/libopencv_gpu.so
/usr/local/lib/libopencv_highgui.so
/usr/local/lib/libopencv_imgproc.so
/usr/local/lib/libopencv_legacy.so
/usr/local/lib/libopencv_ml.so
/usr/local/lib/libopencv_nonfree.so
/usr/local/lib/libopencv_objdetect.so
/usr/local/lib/libopencv_ocl.so
/usr/local/lib/libopencv_photo.so
/usr/local/lib/libopencv_stitching.so
/usr/local/lib/libopencv_superres.so
/usr/local/lib/libopencv_ts.a
/usr/local/lib/libopencv_video.so
/usr/local/lib/libopencv_videostab.so
-lrt
-lpthread
-lm
-ldl
  1. 判断得出该错误的关键代码 tclip-1.0.0/php_ext/config.m4:
  OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv "
  opencv_lib_path=""
  for i in $OPENCV_FLAGS;do
        if test ${i:0:2} = "-I" ;then
                PHP_ADD_INCLUDE(${i:2})
        elif test ${i:0:2} = "-L" ;then
                opencv_lib_path=${i:2}
        elif test ${i:${#i}-3} = ".so" ;then
                dir_name=`dirname $i`
                file_name=${i/$dir_name/}
                file_name=${file_name/\/lib/}
                file_name=${file_name/.so/}
                        #PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD)
                        PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD)
        elif test ${i:${#i}-6} = ".dylib" ;then
                dir_name=`dirname $i`
                file_name=${i/$dir_name/}
                file_name=${file_name/\/lib/}
                file_name=${file_name/.dylib/}
                        PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD)
        elif test ${i:0:2} = "-l" ;then
                file_name=${i:2}
                PHP_ADD_LIBRARY_WITH_PATH($file_name,$opencv_lib_path,TCLIP_SHARED_LIBADD)
            else
                        AC_MSG_ERROR([no result from pkg-config opencv --libs --cflags opencv])
        fi
  done

很明显是/usr/local/lib/libopencv_ts.a导致了该错误,实在太菜了,不懂C语言,也不晓得这个是做什么用的,就参考以上2篇文章

OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv` "

pkg-config opencv --libs --cflags opencv修改为该命令执行结果,并移除/usr/local/lib/libopencv_ts.a 编译就通过了

来反馈下,海龙大神抽空看下是什么问题导致的。

能否考虑支持文字水印

能否考虑支持文字水印?

putText(dest_image, "xingqiba" , Point(10, dest_image.rows-20), CV_FONT_HERSHEY_SIMPLEX, 0.8f, CV_RGB(255,255,255), 2);
a1_ demo

tclip 扩展加载出错

系统环境:
PHP Version 5.4.16
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64

问题现象:
[root@localhost ~]# php -m | grep 'tclip'
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/tclip.so' - libopencv_videostab.so.2.4: cannot open shared object file: No such file or directory in Unknown on line 0

这个扩展是不是不支持64php?

tclip扩展无法加载图片的问题

Warning: tclip(): fail to load image from www.baidu.com/img/bd_logo1.png
bool(false)

原因出自:
image = imread( source_path );
if( !image.data ){
php_error_docref(NULL TSRMLS_CC, E_WARNING, "fail to load image from %s", source_path);
RETURN_FALSE;
}

解决方法:
imread 这个函数而言,Debug版的库只能用于Debug版的程序,Release版的库只能用于Release 版程序。

php 7.1 编译完成,运行报错

编译一切顺利,运行时

[root@localhost php_ext]# php -m
OpenCV Error: Null pointer (NULL or empty buffer) in cvOpenFileStorage, file /root/opencv-2.4.13/modules/core/src/persistence.cpp, line 2696
terminate called after throwing an instance of 'cv::Exception'
  what():  /root/opencv-2.4.13/modules/core/src/persistence.cpp:2696: error: (-27) NULL or empty buffer in function cvOpenFileStorage

已放弃

centos 7 gcc 4.8.5

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.