You really just need to apply a filter to get the product type you want:
g.v('u1','u2').out('like').has('type','camera').groupCount().cap.next().sort{-it.value}
It may or may not be efficient to do sorting/paging this way. I suppose it depends on how many likes you are dealing with. Thousands might not be a big deal, but hundreds of thousands might be less than what you can endure.
As you are using Titan you have more options than most graphs to solve this problem (if it actually is a problem - I suggest you generate test data and write some queries to see for sure). One thing you might do is denormalize the "type" property to the "like" edge so that you can apply your "type" filter on outE
as opposed to forcing the traversal over out
as shown above (forcing the traversal means Titan needs to find the vertex at the other end of the edge which adds to the amount of data Titan needs to retrieve). You can read more about these options here.