Animset results of analyze function through python do not match results from facefx studio

Hi,

I'm using a batch file to automatically create facefx animsets from a list of .wav files in a folder and a specific .facefx actor.

The analysis using the python libraries for face fx and runs:

FxStudio.issueCommand(analyze -directory ' + path + ' -overwrite -language ' + language + ' -analysisactor ' + getActorPath() +';')

However when I import the generated animset using the same facefx actor in FaceFX Studio and run the Animation -> ReAnalyze Audio and Text Files then re-export the animset the results are not the same as the original analysis. This currently prevents us from being able to batch analyze our assets as we end up having to manually analyze them through FaceFx Studio in the end.

Is there something that I am doing wrong with the python command?

Thank you

Permalink

I think your issue is that you are passing the current actor's path into the -analysisactor variable. This flag is intended to take the name of a .facefx found in your analysis actor directory ( Your_FaceFX_Studio_Dir/Analysis Actors ) without the .facefx extention. If you are unsure what to do, don't specify the flag at all, and that will use the "Default.facefx" analysis actor which is probably what you are using to analyze with from studio.

Permalink

Our facefx actors are stored in our own asset folders on another drive. Is there no way to specify an external path for the analysis actors?

If we open this actor in face fx studio directly and use the analyze function in facefx studio, does the analysis in this case use the correct actor ?

Thank you

Permalink

An "analysis actor" is a special file that is used to generate the gesture curves like Blink, Eyebrow Raise, and head and eye rotations. Most people just use our Default one (which you can specify by not using the -analysisactor flag at all), but if you know what you are doing, you can modify it or create your own.

More information on analysis actors is available here:
http://facefx.com/documentation/2013.2/W61

Correct me if I'm wrong, but I think that is where you are going wrong. You seem to be expecting that the "analysis actor" is the .facefx file where you want the analysis to go. This is *not* the case. The analysis will go in whatever actor you have loaded (via a previous call to loadActor).

Your last question is more on-target. Yes, you need to first load an actor from FaceFX Studio (or from script with loadActor) then call the analysis command and the results will be in the loaded actor. Call the saveActor command to save the results.

Permalink

Actually I don't want the analysis to go into the face fx actor. I just want to generate an .animset file from the analysis. Before I make the call to analyze I also do a FxStudio.issueCommand('loadActor -file ' + actorPath + ';')

Maybe I should just remove the -analysisactor argument to my analyze command?

Mainly I would just like the resulting animset exported by my command

FxStudio.issueCommand('animSet -export ' + groupName + ' -to ' + outputPath + ';')

in this scenario to be the same as the result of a "Reanalyze Audio and Text Files" that is manually run in FaceFX studio if I open the same actor in FaceFX studio before doing the analysis.

Permalink

The animation must go into the facefx actor and then exported if you want it in an animset file. Just stop passing -analysisactor to the analyze command and you will get the same behavior as inside of Studio.

Permalink

Hi,

I'm working with Tien on the same project: actually we still have an issue: we are getting an analyse result different even when using the Default analyse actor.
After you asked us to use only the default analyse actor: here is what we did:
- replace the default.facefx analyse actor that is the program facefx 2013.3 under "\Analysis Actors" folder
- run an external python script to analyse the audio files and generate the animsets.
- the result we get here is a way different from the result we have when we use the same Default analyse actor from within FaceFx studio.

Permalink

Can you define "way different"? Can you send us exact reproduction steps with the files you are using to support (at) oc3ent (dot) com with a brief description of the differences and or screenshots / video?

What do you mean you replaced the default analysis actor? You mean you have a custom default analysis actor that you created yourself and you overwrite the original Default.facefx?

You should only be concerned with analysis actors if you are a very advanced FaceFX user and are intimately familiar with the analysis process and what the analysis actors do. Analysis actors are completely different from your .facefx file containing your character; they are not the same thing. For normal operation, you do not need to know what analysis actors are or how they work, and you certainly should not be overwriting the original Default.facefx file. See Doug's original response above for a bit more clarification.

I can tell you that the same analysis process happens whether you do it from inside of Studio, via the analyze command, or via the analyze command from Python. There's no difference. If you follow these steps, you should not have a problem:

1. Reinstall FaceFX Studio to make sure you have the *original* analysis actor files. Do not modify or overwrite those files.

2. In your Python script, first load your .facefx file with your character. This is via loadActor -f.

3. Once *your* character's .facefx file is loaded, issue the analyze commands. Ignore the analysis actor argument so that it uses our original default. Do not copy any files anywhere, do not modify those files, pretend they and the argument do not even exist.

4. If you want the new animations in .animset files, export them via commands.

5. Save.

Permalink

thank you for your answer,
we'll try forcing to load our FaceFx actor, and keep the default analysis actor.