Recherche avancée

Médias (0)

Mot : - Tags -/serveur

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (12)

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

  • Demande de création d’un canal

    12 mars 2010, par

    En fonction de la configuration de la plateforme, l’utilisateur peu avoir à sa disposition deux méthodes différentes de demande de création de canal. La première est au moment de son inscription, la seconde, après son inscription en remplissant un formulaire de demande.
    Les deux manières demandent les mêmes choses fonctionnent à peu près de la même manière, le futur utilisateur doit remplir une série de champ de formulaire permettant tout d’abord aux administrateurs d’avoir des informations quant à (...)

Sur d’autres sites (5971)

  • Screen Recording with FFmpeg-Lib with c++

    27 janvier 2020, par Baschdel

    I’m trying to record the whole desktop stream with FFmpeg on Windows.
    I found a working example here. The Problem is that some og the functions depricated. So I tried to replace them with the updated ones.

    But there are some slight problems. The error "has triggered a breakpoint." occurse and also "not able to read the location."
    The bigger problem is that I don’t know if this is the right way to do this..

    My code looks like this :

    using namespace std;

    /* initialize the resources*/
    Recorder::Recorder()
    {

       av_register_all();
       avcodec_register_all();
       avdevice_register_all();
       cout<<"\nall required functions are registered successfully";
    }

    /* uninitialize the resources */
    Recorder::~Recorder()
    {

       avformat_close_input(&pAVFormatContext);
       if( !pAVFormatContext )
       {
           cout<<"\nfile closed sucessfully";
       }
       else
       {
           cout<<"\nunable to close the file";
           exit(1);
       }

       avformat_free_context(pAVFormatContext);
       if( !pAVFormatContext )
       {
           cout<<"\navformat free successfully";
       }
       else
       {
           cout<<"\nunable to free avformat context";
           exit(1);
       }

    }

    /* establishing the connection between camera or screen through its respective folder */
    int Recorder::openCamera()
    {

       value = 0;
       options = NULL;
       pAVFormatContext = NULL;

       pAVFormatContext = avformat_alloc_context();//Allocate an AVFormatContext.

       openScreen(pAVFormatContext);

       /* set frame per second */
       value = av_dict_set( &options,"framerate","30",0 );
       if(value < 0)
       {
         cout<<"\nerror in setting dictionary value";
          exit(1);
       }

       value = av_dict_set( &options, "preset", "medium", 0 );
       if(value < 0)
       {
         cout<<"\nerror in setting preset values";
         exit(1);
       }

    //  value = avformat_find_stream_info(pAVFormatContext,NULL);
       if(value < 0)
       {
         cout<<"\nunable to find the stream information";
         exit(1);
       }

       VideoStreamIndx = -1;

       /* find the first video stream index . Also there is an API available to do the below operations */
       for(int i = 0; i < pAVFormatContext->nb_streams; i++ ) // find video stream posistion/index.
       {
         if( pAVFormatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO )
         {
            VideoStreamIndx = i;
            break;
         }

       }

       if( VideoStreamIndx == -1)
       {
         cout<<"\nunable to find the video stream index. (-1)";
         exit(1);
       }

       // assign pAVFormatContext to VideoStreamIndx
       pAVCodecContext = pAVFormatContext->streams[VideoStreamIndx]->codec;

       pAVCodec = avcodec_find_decoder(pAVCodecContext->codec_id);
       if( pAVCodec == NULL )
       {
         cout<<"\nunable to find the decoder";
         exit(1);
       }

       value = avcodec_open2(pAVCodecContext , pAVCodec , NULL);//Initialize the AVCodecContext to use the given AVCodec.
       if( value < 0 )
       {
         cout<<"\nunable to open the av codec";
         exit(1);
       }
    }

    /* initialize the video output file and its properties  */
    int Recorder::init_outputfile()
    {
       outAVFormatContext = NULL;
       value = 0;
       output_file = "output.mp4";

       avformat_alloc_output_context2(&outAVFormatContext, NULL, NULL, output_file);
       if (!outAVFormatContext)
       {
           cout<<"\nerror in allocating av format output context";
           exit(1);
       }

    /* Returns the output format in the list of registered output formats which best matches the provided parameters, or returns NULL if there is no match. */
       output_format = av_guess_format(NULL, output_file ,NULL);
       if( !output_format )
       {
        cout<<"\nerror in guessing the video format. try with correct format";
        exit(1);
       }

       video_st = avformat_new_stream(outAVFormatContext ,NULL);
       if( !video_st )
       {
           cout<<"\nerror in creating a av format new stream";
           exit(1);
       }

       if (codec_id == AV_CODEC_ID_H264)
       {
           av_opt_set(outAVCodecContext->priv_data, "preset", "slow", 0);
       }

       outAVCodec = avcodec_find_encoder(AV_CODEC_ID_MPEG4);
       if (!outAVCodec)
       {
           cout << "\nerror in finding the av codecs. try again with correct codec";
           exit(1);
       }

       outAVCodecContext = avcodec_alloc_context3(outAVCodec);
       if( !outAVCodecContext )
       {
           cout<<"\nerror in allocating the codec contexts";
           exit(1);
       }

       /* set property of the video file */
       outAVCodecContext = video_st->codec;
       outAVCodecContext->codec_id = AV_CODEC_ID_MPEG4;// AV_CODEC_ID_MPEG4; // AV_CODEC_ID_H264 // AV_CODEC_ID_MPEG1VIDEO
       outAVCodecContext->codec_type = AVMEDIA_TYPE_VIDEO;
       outAVCodecContext->pix_fmt  = AV_PIX_FMT_YUV420P;
       outAVCodecContext->bit_rate = 400000; // 2500000
       outAVCodecContext->width = 1920;
       outAVCodecContext->height = 1080;
       outAVCodecContext->gop_size = 3;
       outAVCodecContext->max_b_frames = 2;
       outAVCodecContext->time_base.num = 1;
       outAVCodecContext->time_base.den = 30; //15fps


       /* Some container formats (like MP4) require global headers to be present
          Mark the encoder so that it behaves accordingly. */

       if ( outAVFormatContext->oformat->flags & AVFMT_GLOBALHEADER)
       {
           outAVCodecContext->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
       }

       value = avcodec_open2(outAVCodecContext, outAVCodec, NULL);
       if( value < 0)
       {
           cout<<"\nerror in opening the avcodec";
           exit(1);
       }

       /* create empty video file */
       if ( !(outAVFormatContext->flags & AVFMT_NOFILE) )
       {
        if( avio_open2(&outAVFormatContext->pb , output_file , AVIO_FLAG_WRITE ,NULL, NULL) < 0 )
        {
         cout<<"\nerror in creating the video file";
         exit(1);
        }
       }

       if(!outAVFormatContext->nb_streams)
       {
           cout<<"\noutput file dose not contain any stream";
           exit(1);
       }

       /* imp: mp4 container or some advanced container file required header information*/
       value = avformat_write_header(outAVFormatContext , &options);
       if(value < 0)
       {
           cout<<"\nerror in writing the header context";
           exit(1);
       }

       /*
       // uncomment here to view the complete video file informations
       cout<<"\n\nOutput file information :\n\n";
       av_dump_format(outAVFormatContext , 0 ,output_file ,1);
       */
    }

    int Recorder::stop() {
       threading = false;

       demux->join();
       rescale->join();
       mux->join();

       return 0;
    }

    int Recorder::start() {
       initVideoThreads();
       return 0;
    }

    int Recorder::initVideoThreads() {
       demux = new thread(&Recorder::demuxVideoStream, this, pAVCodecContext, pAVFormatContext, VideoStreamIndx);

       rescale = new thread(&Recorder::rescaleVideoStream, this, pAVCodecContext, outAVCodecContext);

       demux = new thread(&Recorder::encodeVideoStream, this, outAVCodecContext);
       return 0;
    }

    void Recorder::demuxVideoStream(AVCodecContext* codecContext, AVFormatContext* formatContext, int streamIndex)
    {
       // init packet
       AVPacket* packet = (AVPacket*)av_malloc(sizeof(AVPacket));
       av_init_packet(packet);

       int ctr = 0;

       while (threading)
       {
           if (av_read_frame(formatContext, packet) < 0) {
               exit(1);
           }

           if (packet->stream_index == streamIndex)
           {
               int return_value; // = 0;
               ctr++;

               do
               {
                   return_value = avcodec_send_packet(codecContext, packet);
               } while (return_value == AVERROR(EAGAIN) && threading);

               //int i = avcodec_send_packet(codecContext, packet);
               if (return_value < 0 && threading) { // call Decoder
                   cout << "unable to decode video";
                   exit(1);
               }
           }
       }

       avcodec_send_packet(codecContext, NULL); // flush decoder

       // return 0;
    }

    void Recorder::rescaleVideoStream(AVCodecContext* inCodecContext, AVCodecContext* outCodecContext)
    {
       bool closing = false;
       AVFrame* inFrame = av_frame_alloc();
       if (!inFrame)
       {
           cout << "\nunable to release the avframe resources";
           exit(1);
       }

       int nbytes = av_image_get_buffer_size(outAVCodecContext->pix_fmt, outAVCodecContext->width, outAVCodecContext->height, 32);
       uint8_t* video_outbuf = (uint8_t*)av_malloc(nbytes);
       if (video_outbuf == NULL)
       {
           cout << "\nunable to allocate memory";
           exit(1);
       }

       AVFrame* outFrame = av_frame_alloc();//Allocate an AVFrame and set its fields to default values.
       if (!outFrame)
       {
           cout << "\nunable to release the avframe resources for outframe";
           exit(1);
       }

       // Setup the data pointers and linesizes based on the specified image parameters and the provided array.
       int value = av_image_fill_arrays(outFrame->data, outFrame->linesize, video_outbuf, AV_PIX_FMT_YUV420P, outAVCodecContext->width, outAVCodecContext->height, 1); // returns : the size in bytes required for src
       if (value < 0)
       {
           cout << "\nerror in filling image array";
       }
       int ctr = 0;

       while (threading || !closing) {
           int value = avcodec_receive_frame(inCodecContext, inFrame);
           if (value == 0) {
               ctr++;
               SwsContext* swsCtx_ = sws_getContext(inCodecContext->width,
                   inCodecContext->height,
                   inCodecContext->pix_fmt,
                   outAVCodecContext->width,
                   outAVCodecContext->height,
                   outAVCodecContext->pix_fmt,
                   SWS_BICUBIC, NULL, NULL, NULL);
               sws_scale(swsCtx_, inFrame->data, inFrame->linesize, 0, inCodecContext->height, outFrame->data, outFrame->linesize);


               int return_value;
               do
               {
                   return_value = avcodec_send_frame(outCodecContext, outFrame);
               } while (return_value == AVERROR(EAGAIN) && threading);
           }
           closing = (value == AVERROR_EOF);
       }
       avcodec_send_frame(outCodecContext, NULL);


       // av_free(video_outbuf);

       // return 0;
    }

    void Recorder::encodeVideoStream(AVCodecContext* codecContext)
    {
       bool closing = true;
       AVPacket* packet = (AVPacket*)av_malloc(sizeof(AVPacket));
       av_init_packet(packet);

       int ctr = 0;

       while (threading || !closing) {
           packet->data = NULL;    // packet data will be allocated by the encoder
           packet->size = 0;
           ctr++;
           int value = avcodec_receive_packet(codecContext, packet);
           if (value == 0) {
               if (packet->pts != AV_NOPTS_VALUE)
                   packet->pts = av_rescale_q(packet->pts, video_st->codec->time_base, video_st->time_base);
               if (packet->dts != AV_NOPTS_VALUE)
                   packet->dts = av_rescale_q(packet->dts, video_st->codec->time_base, video_st->time_base);

               //printf("Write frame %3d (size= %2d)\n", j++, packet->size / 1000);
               if (av_write_frame(outAVFormatContext, packet) != 0)
               {
                   cout << "\nerror in writing video frame";
               }
           }

           closing = (value == AVERROR_EOF);
       }

       value = av_write_trailer(outAVFormatContext);
       if (value < 0)
       {
           cout << "\nerror in writing av trailer";
           exit(1);
       }

       // av_free(packet);

       // return 0;
    }


    int Recorder::openScreen(AVFormatContext* pFormatCtx) {
       /*

       X11 video input device.
       To enable this input device during configuration you need libxcb installed on your system. It will be automatically detected during configuration.
       This device allows one to capture a region of an X11 display.
       refer : https://www.ffmpeg.org/ffmpeg-devices.html#x11grab
       */
       /* current below is for screen recording. to connect with camera use v4l2 as a input parameter for av_find_input_format */
       pAVInputFormat = av_find_input_format("gdigrab");
       //value = avformat_open_input(&pAVFormatContext, ":0.0+10,250", pAVInputFormat, NULL);

       value = avformat_open_input(&pAVFormatContext, "desktop", pAVInputFormat, NULL);
       if (value != 0)
       {
           cout << "\nerror in opening input device";
           exit(1);
       }
       return 0;
    }
  • Error installing package in anaconda : Attempted to make prefix record for unknown package type

    25 janvier 2020, par ashwinids

    I’m getting the error below for doing any operation install, update or uninstall

    ERROR conda.core.link:_execute(700) : An error occurred while
    uninstalling package ’::ffmpeg-3.2.4-2’. Rolling back
    transaction : done

    ValueError(’Attempted to make prefix record for unknown package type :
    ffmpeg-3.2.4-2’,)

    Details about the environment :
    OS : ubuntu 18.04
    python version : intelpython3

    Conda info

        active environment : base
       active env location : /home/p****/intelpython3
               shell level : 1
          user config file : /home/p****/.condarc
    populated config files : /home/p****/.condarc
             conda version : 4.7.12
       conda-build version : not installed
            python version : 3.6.8.final.0
          virtual packages : __cuda=10.1
          base environment : /home/p****/intelpython3  (writable)
              channel URLs : https://conda.anaconda.org/intel/linux-64
                             https://conda.anaconda.org/intel/noarch
                             https://repo.anaconda.com/pkgs/main/linux-64
                             https://repo.anaconda.com/pkgs/main/noarch
                             https://repo.anaconda.com/pkgs/r/linux-64
                             https://repo.anaconda.com/pkgs/r/noarch
             package cache : /home/p****/intelpython3/pkgs
                             /home/p****/.conda/pkgs
          envs directories : /home/p****/intelpython3/envs
                             /home/p****/.conda/envs
                  platform : linux-64
                user-agent : conda/4.7.12 requests/2.20.1 CPython/3.6.8 Linux/5.0.0-36-generic ubuntu/18.04.3 glibc/2.27
                   UID:GID : 1000:1000
                netrc file : None
              offline mode : False

    Conda list

    # packages in environment at /home/p****/intelpython3:
    #
    # Name                    Version                   Build  Channel
    _tflow_select             2.1.0                       gpu    anaconda
    absl-py                   0.8.0                    py36_0    anaconda
    affine                    2.3.0                    pypi_0    pypi
    asn1crypto                0.24.0                   py36_3    intel
    astor                     0.8.0                    py36_0    anaconda
    atomicwrites              1.3.0                    pypi_0    pypi
    attrs                     19.3.0                   pypi_0    pypi
    audioread                 2.1.6                    py36_0    <unknown>
    awscli                    1.16.292                 pypi_0    pypi
    backcall                  0.1.0                    py36_2    <unknown>
    backports                 1.0                      py36_9    <unknown>
    bayesian-optimization     1.0.1                    pypi_0    pypi
    bleach                    2.1.3                    py36_2    <unknown>
    boto3                     1.10.19                  pypi_0    pypi
    botocore                  1.13.28                  pypi_0    pypi
    bzip2                     1.0.6                        17    intel
    c-ares                    1.15.0            h7b6447c_1001    anaconda
    causalgraphicalmodels     0.0.4                    pypi_0    pypi
    certifi                   2018.1.18                py36_2    intel
    cffi                      1.11.5                   py36_3    intel
    chardet                   3.0.4                    py36_3    intel
    click                     7.0                      pypi_0    pypi
    click-plugins             1.1.1                    pypi_0    pypi
    cligj                     0.5.0                    pypi_0    pypi
    colorama                  0.4.1                    pypi_0    pypi
    conda                     4.7.12                   py36_0  
    conda-env                 2.6.0                         1  
    conda-package-handling    1.6.0            py36h7b6447c_0    anaconda
    cryptography              2.3                      py36_1    intel
    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.0                cuda10.1_0    anaconda
    cupti                     10.1.168                      0    anaconda
    cvxopt                    1.2.3                    pypi_0    pypi
    cycler                    0.10.0                   py36_7    intel
    cython                    0.29.6           py36h7b7c402_0    intel
    daal                      2019.4                intel_243    <unknown>
    daal4py                   2019.4           py36h7b7c402_0    intel
    dbus                      1.13.12              h746ee38_0  
    decorator                 4.3.0                    py36_3    <unknown>
    descartes                 1.1.0                    pypi_0    pypi
    docutils                  0.15.2                   pypi_0    pypi
    dowhy                     0.1.1                    pypi_0    pypi
    entrypoints               0.2.3                    py36_2    <unknown>
    expat                     2.2.6                he6710b0_0  
    ffmpeg                    3.2.4                         2    <unknown>
    fiona                     1.8.11                   pypi_0    pypi
    fontconfig                2.12.6               h49f89f6_0  
    freetype                  2.8                  hab7d2ae_1  
    funcsigs                  1.0.2                    py36_7    intel
    gast                      0.3.2                      py_0    anaconda
    geopandas                 0.6.2                    pypi_0    pypi
    get_terminal_size         1.0.0                    py36_7    <unknown>
    glib                      2.63.1               h5a9c865_0  
    google-pasta              0.1.7                      py_0    anaconda
    grpcio                    1.14.1           py36h9ba97e2_0    anaconda
    gst-plugins-base          1.12.4               h33fb286_0  
    gstreamer                 1.12.4               hb53b477_0  
    h5py                      2.9.0            py36h7918eee_0    anaconda
    hdf5                      1.10.4               hb1b8bf9_0    anaconda
    html5lib                  1.0.1                    py36_4    <unknown>
    icc_rt                    2019.4                intel_243    <unknown>
    icu                       58.2                 h9c2bf20_1  
    idna                      2.6                      py36_3    intel
    imageio                   2.6.1                    pypi_0    pypi
    imgaug                    0.2.6                    pypi_0    pypi
    impi_rt                   2019.4                intel_243    <unknown>
    importlib-metadata        0.23                     pypi_0    pypi
    intel-openmp              2019.4                intel_243    <unknown>
    intelpython               2019.4                        0    intel
    ipp                       2019.4                intel_243    <unknown>
    ipykernel                 4.6.1                    py36_2    <unknown>
    ipython                   6.3.1                    py36_3    <unknown>
    ipython_genutils          0.2.0                    py36_2    <unknown>
    jedi                      0.12.0                   py36_2    <unknown>
    jinja2                    2.10.3                   pypi_0    pypi
    jmespath                  0.9.4                    pypi_0    pypi
    joblib                    0.13.2                   pypi_0    pypi
    jpeg                      9b                   h024ee3a_2  
    json5                     0.8.5                    pypi_0    pypi
    jsonschema                3.2.0                    pypi_0    pypi
    jupyter                   1.0.0                    py36_7    intel
    jupyter_client            5.1.0                    py36_5    <unknown>
    jupyter_console           5.1.0                    py36_2    <unknown>
    jupyter_core              4.4.0                    py36_6    <unknown>
    jupyterlab                1.2.3                    pypi_0    pypi
    jupyterlab-server         1.0.6                    pypi_0    pypi
    keras                     2.3.1                    pypi_0    pypi
    keras-applications        1.0.8                      py_0    anaconda
    keras-bert                0.80.0                   pypi_0    pypi
    keras-embed-sim           0.7.0                    pypi_0    pypi
    keras-layer-normalization 0.14.0                   pypi_0    pypi
    keras-multi-head          0.22.0                   pypi_0    pypi
    keras-pos-embd            0.11.0                   pypi_0    pypi
    keras-position-wise-feed-forward 0.6.0                    pypi_0    pypi
    keras-preprocessing       1.1.0                      py_1    anaconda
    keras-rectified-adam      0.17.0                   pypi_0    pypi
    keras-self-attention      0.41.0                   pypi_0    pypi
    keras-transformer         0.31.0                   pypi_0    pypi
    kiwisolver                1.0.1                    py36_2    intel
    libffi                    3.2.1                        11    intel
    libgcc-ng                 9.1.0                hdf63c60_0    anaconda
    libgfortran-ng            7.3.0                hdf63c60_0    anaconda
    libiconv                  1.14                          4    <unknown>
    libpng                    1.6.36                        2    intel
    libprotobuf               3.9.2                hd408876_0    anaconda
    librosa                   0.6.3                    pypi_0    pypi
    libsodium                 1.0.16                        3    <unknown>
    libstdcxx-ng              9.1.0                hdf63c60_0    anaconda
    libtiff                   4.0.9                he85c1e1_1  
    libxcb                    1.13                 h1bed415_1  
    libxml2                   2.9.8                hf84eae3_0  
    lightgbm                  2.3.1                    pypi_0    pypi
    llvmlite                  0.27.1                   py36_0    intel
    markdown                  3.1.1                    py36_0    anaconda
    markupsafe                1.0                      py36_3    <unknown>
    matplotlib                2.1.0            py36hba5de38_0  
    mercantile                1.1.2                    pypi_0    pypi
    metaflow                  2.0.0                    pypi_0    pypi
    mistune                   0.8.3                    py36_2    <unknown>
    mkl                       2019.4                intel_243    <unknown>
    mkl-service               1.0.0           py36h7b7c402_11    intel
    mkl_fft                   1.0.11           py36h7b7c402_2    intel
    mkl_random                1.0.2            py36h7b7c402_4    intel
    more-itertools            7.2.0                    pypi_0    pypi
    mpi4py                    3.0.0                    py36_3    intel
    mpmath                    1.1.0                    pypi_0    pypi
    munch                     2.5.0                    pypi_0    pypi
    nbconvert                 5.2.1                    py36_2    <unknown>
    nbformat                  4.4.0                    py36_2    <unknown>
    networkx                  2.4                      pypi_0    pypi
    ninja                     1.9.0            py36hfd86e86_0  
    noisyopt                  0.2.2                    pypi_0    pypi
    notebook                  5.2.2                    py36_1    intel
    numba                     0.42.1              np116py36_2    intel
    numexpr                   2.6.8                    py36_2    intel
    numpy                     1.16.2           py36h7b7c402_0    intel
    numpy-base                1.16.2                   py36_0    intel
    oauthlib                  3.1.0                    pypi_0    pypi
    olefile                   0.46                       py_0  
    openssl                   1.0.2r                        2    intel
    packaging                 19.2                     pypi_0    pypi
    pandas                    0.24.1                   py36_3    intel
    pandocfilters             1.4.1                    py36_2    <unknown>
    parso                     0.2.0                    py36_2    <unknown>
    path.py                   11.0.1                   py36_2    <unknown>
    pcre                      8.43                 he6710b0_0  
    pexpect                   4.2.1                    py36_4    <unknown>
    pickleshare               0.7.4                    py36_3    <unknown>
    pillow                    6.2.1                    pypi_0    pypi
    pip                       19.3.1                   pypi_0    pypi
    pluggy                    0.13.1                   pypi_0    pypi
    prompt_toolkit            1.0.15                   py36_2    <unknown>
    protobuf                  3.9.2            py36he6710b0_0    anaconda
    ptyprocess                0.5.2                    py36_2    <unknown>
    pulp                      2.0                      pypi_0    pypi
    py                        1.8.0                    pypi_0    pypi
    pyasn1                    0.4.8                    pypi_0    pypi
    pycosat                   0.6.3                    py36_3    intel
    pycparser                 2.18                     py36_2    intel
    pydot                     1.4.1                    pypi_0    pypi
    pyeditline                2.0.0                    py36_0    intel
    pygments                  2.2.0                    py36_5    <unknown>
    pygmy                     0.2.0                    pypi_0    pypi
    pyopenssl                 17.5.0                   py36_2    intel
    pyparsing                 2.2.0                    py36_2    intel
    pyportfolioopt            0.4.3                    pypi_0    pypi
    pyproj                    2.4.2.post1              pypi_0    pypi
    pyqt                      5.6.0            py36h22d08a2_6  
    pyrsistent                0.15.6                   pypi_0    pypi
    pysocks                   1.6.7                    py36_1    intel
    pytesseract               0.3.0                    pypi_0    pypi
    pytest                    4.6.6                    pypi_0    pypi
    python                    3.6.8                         7    intel
    python-dateutil           2.6.0                   py36_12    intel
    python-graphviz           0.13                     pypi_0    pypi
    pytorch                   1.3.1           py3.6_cuda10.1.243_cudnn7.6.3_0    pytorch
    pytz                      2018.4                   py36_3    intel
    pywavelets                1.1.1                    pypi_0    pypi
    pyyaml                    4.1                      py36_3    intel
    pyzmq                     16.0.2                   py36_6    <unknown>
    qt                        5.6.2               hd25b39d_14  
    rasterio                  1.1.1                    pypi_0    pypi
    regex                     2019.11.1                pypi_0    pypi
    requests                  2.20.1                   py36_1    intel
    requests-oauthlib         1.3.0                    pypi_0    pypi
    resampy                   0.2.1                    pypi_0    pypi
    rio-cogeo                 1.1.6                    pypi_0    pypi
    rsa                       3.4.2                    pypi_0    pypi
    ruamel_yaml               0.11.14                  py36_4    intel
    s3transfer                0.2.1                    pypi_0    pypi
    sacremoses                0.0.35                   pypi_0    pypi
    scikit-image              0.16.2                   pypi_0    pypi
    scikit-learn              0.20.3           py36h7b7c402_5    intel
    scipy                     1.3.3                    pypi_0    pypi
    seaborn                   0.9.0                    pypi_0    pypi
    sentencepiece             0.1.83                   pypi_0    pypi
    setuptools                39.0.1                   py36_0    intel
    shapely                   1.6.4.post2              pypi_0    pypi
    simplegeneric             0.8.1                    py36_7    <unknown>
    sip                       4.18.1           py36hf484d3e_2  
    six                       1.11.0                   py36_3    intel
    smp                       0.1.4                    py36_0    intel
    snuggs                    1.4.7                    pypi_0    pypi
    sqlite                    3.27.2                        4    intel
    supermercado              0.0.5                    pypi_0    pypi
    sympy                     1.4                      pypi_0    pypi
    tbb                       2019.6                intel_243    <unknown>
    tbb4py                    2019.6             py36_intel_0    <unknown>
    tcl                       8.6.4                        24    intel
    tensorboard               1.14.0           py36hf484d3e_0    anaconda
    tensorflow                1.14.0          gpu_py36h3fb9ad6_0    anaconda
    tensorflow-base           1.14.0          gpu_py36he45bfe2_0    anaconda
    tensorflow-estimator      1.14.0                     py_0    anaconda
    tensorflow-gpu            1.14.0               h0d30ee6_0    anaconda
    termcolor                 1.1.0                    py36_1    anaconda
    terminado                 0.8.1                    py36_2    <unknown>
    testpath                  0.3.1                    py36_2    <unknown>
    tk                        8.6.4                        29    intel
    torchvision               0.4.2                py36_cu101    pytorch
    tornado                   4.5.2                    py36_5    <unknown>
    tqdm                      4.36.1                     py_0    anaconda
    traitlets                 4.3.2                    py36_3    <unknown>
    transformers              2.1.1                    pypi_0    pypi
    tweepy                    3.8.0                    pypi_0    pypi
    urllib3                   1.22                     pypi_0    pypi
    wcwidth                   0.1.7                    py36_6    <unknown>
    webencodings              0.5.1                    py36_0    <unknown>
    werkzeug                  0.16.0                     py_0    anaconda
    wheel                     0.31.0                   py36_3    intel
    widgetsnbextension        3.2.0                    py36_1    <unknown>
    wrapt                     1.11.2           py36h7b6447c_0    anaconda
    x264                      20131218                      0    <unknown>
    xgboost                   0.81                     py36_0    intel
    xz                        5.2.3                         2    intel
    yaml                      0.1.7                         2    intel
    zipp                      0.6.0                    pypi_0    pypi
    zlib                      1.2.11                        5    intel
    </unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown></unknown>
  • What is PII ? Your introduction to personally identifiable information

    15 janvier 2020, par Joselyn Khor — Analytics Tips, Privacy, Security

    Most websites you visit collect information about you via tools like Google Analytics and Matomo – sometimes collecting personally identifiable information (PII).

    When it comes to PII, people are becoming more concerned about data privacy. Identifiable information can be used for illegal purposes like identity theft and fraud. 

    So how can you protect yourself as an innocent internet browser ? In the case of website owners – how do you protect users and your company from falling prey to privacy breaches ?

    what is pii

    As one of the most trusted analytics companies, we feel our readers would benefit from being as informed as possible about data privacy issues and PII. Learn what it means, and what you can do to keep yours or others’ information safe.

    Table of Contents

    What does PII stand for ?

    PII acronym

    PII is an acronym for personally identifiable information.

    PII definition

    Personally identifiable information (PII) is a term used predominantly in the United States.

    The appendix of OMB M-10-23 (Guidance for Agency Use of Third-Party Website and Applications) gives this definition for PII :

    “The term ‘personally identifiable information’ refers to information which can be used to distinguish or trace an individual’s identity, such as their name, social security number, biometric records, etc. alone, or when combined with other personal or identifying information which is linked or linkable to a specific individual, such as date and place of birth, mother’s maiden name, etc.”

    What can be considered personally identifiable information (PII) ? Some PII examples :

    • Full name/usernames
    • Home address/mailing address
    • Email address
    • Credit card numbers
    • Date of birth
    • Phone numbers
    • Login details
    • Precise locations
    • Account numbers
    • Passwords
    • Security codes (including biometric records)
    • Personal identification numbers
    • Driver license number
    • Get a more comprehensive list here

    What’s non-PII ?

    Anonymous information, or information that can’t be traced back to an individual, can be considered non-PII.

    Who is affected by the exploitation of PII ?

    Anyone can be affected by the exploitation of personal data, where you have identity theft, account fraud and account takeovers. When websites resort to illegally selling or sharing your data and compromising your privacy, the fear is falling victim to such fraudulent activity. 

    PII can also be an issue when employees have access to the database and the data is not encrypted. For example, anyone working in a bank can access your accounts ; anyone working at Facebook may be able to read your messages. This shows how privacy breaches can easily happen when employees have access to PII.

    Website owner’s responsibility for data privacy (PII and analytics)

    To respect your website visitor’s privacy, best practice is to avoid collecting PII whenever possible. If you work in an industry which requires people to disclose personal information (e.g. healthcare, security industries, public sector), then you must ensure this data is collected and handled securely. 

    Protecting pii

    The US National Institute of Standards and Technology states : “The likelihood of harm caused by a breach involving PII is greatly reduced if an organisation minimises the amount of PII it uses, collects, and stores. For example, an organisation should only request PII in a new form if the PII is absolutely necessary.” 

    How you’re held accountable remains up to the privacy laws of the country you’re doing business in. Make sure you are fully aware of the privacy and data protection laws that relate specifically to you. 

    To reduce the risk of privacy breaches, try collecting as little PII as you can ; purging it as soon as you can ; and making sure your IT security is updated and protected against security threats. 

    If you’re using data collection tools like web analytics, data may be tracked through features like User ID, custom variables, and custom dimensions. Sometimes they are also harder to identify when they are present, for example, in page URLs, page titles, or referrers URLs. So make sure you’re optimising your web analytics tools’ settings to ensure you’re asking your users for consent and respecting users’ privacy.

    If you’re using a GDPR compliant tool like Matomo, learn how you can stop processing such personal data

    PII, GDPR and businesses in the US/EU

    Because PII is broad, you may run into confusion when considering PII and GDPR (which applies in the EU). The General Data Protection Regulation (GDPR) provides more safeguards for user privacy.

    GDPR grants people in the EU more rights concerning their “personal data” (more on PII vs personal data below). In the EU the GDPR restricts the collection and processing of personal data. The repercussions are severe penalties and fines for privacy infringements. Businesses are required to handle this personal data carefully. You can be fined up to 4% of their yearly revenue for data breaches or non-compliance. 

    GDPR and personal information

    Although there isn’t an overarching data protection law in the US, there are hundreds of laws on both the federal and state levels to protect the personal data of US residents. US Congress has also enacted industry-specific statutes related to data privacy, and the state of California passed the California Consumer Privacy Act. 

    To be on the safe side, if you are using analytics, follow matters relating to “personal data” in the GDPR. It’s all-encompassing when it comes to protecting user privacy. GDPR rules still apply whenever an EU citizen visits any non EU site (that processes personal data).

    Personally identifiable information (PII) vs personal data

    PII and “personal data” aren’t used interchangeably. All personal data can be PII, but not all PII can be defined as personal data.

    The definition of “personal data” according to the GDPR :

    GDPR personal data definition

    This means “personal data” encompasses a greater number of identifiers which include the online sphere. Examples include : IP addresses and URL names. As well as seemingly “innocent” data like height, job position, company etc. 

    What’s considered personal data depends on the context. If a piece of information can be combined with others to establish someone’s identity then that can be considered personal data. 

    Under GDPR, when processing personal data, you need explicit consent. You need to ensure you’re compliant according to GDPR definitions of “personal data” not just what’s considered “PII”.

    How Matomo deals with PII and personal data

    Although Matomo Analytics is a web analytics software that tracks user activity on your website, we take privacy and PII very seriously – on both our Cloud and On-Premise offerings. 

    If you’re using Matomo and would like to know how you can be fully GDPR compliant and protect user privacy, read more :

    Disclaimer

    We are not lawyers and don’t claim to be. The information provided here is to help give an introduction to issues you may encounter when dealing with PII. We encourage every business and website to take data privacy seriously and discuss these issues with your lawyer if you have any concerns.